第一篇:职工信息管理系统
职工信息管理系统设计报告(VB)编号:22
职工信息管理系统 设计报告
学院
土木工程
班级
测绘C111
学号
117551
姓名
马骁飞
成绩
一、设计思路
1.要达到的目的
培养学生综合利用VB语言进行程序设计的能力,主要是培养学生综合使用基本控件的、文件读写、数组操作等能力。
利用读取数据按钮,打开选中的数据文件职工.txt,并从该文件中读取职工职工号、姓名、职称和工资,保存在数组中,并显示在文本框中。
清除文本框中的职工的信息。
在文本框中显示职工的信息。
按照职工号查询职工信息,并显示。
按照姓名查询职工信息,并显示。
按照职工号修改职工信息,并显示。
按照姓名修改职工信息,并显示。
追加一条记录数据,并显示。2.关键问题的解决
(1)通过“读取数据”按钮应能利用应能利用右侧图示样式窗体形式,打开选中的数据文件职工.txt,并从该文件中读取职工职工号、姓名、职称和工资,保存在数组中,并显示在文本框中。(2)通过“清除数据”按钮应能清除文本框中的内容。(3)从“按职工号查询”按钮左端文本框输入职工号,单击“按职工号查询”,在窗体大的文本框中显示查询结果。从“按姓名查询”按钮左端文本框输入姓名,单击“按姓名查询”按钮,在窗体大的文本框中显示查询结果。(4)从“按职工号修改”(“按姓名修改”)按钮,在输入对话框中输入职工号,对查询到的职工的职工号(姓名)进行修改,在窗体大的文本框中显示修改结果。
从输入一条记录后文本框中输入一条记录信息,单击“追加数据并显示结果”按钮,添加到职工.txt中,并将追加数据后职工.txt的信息显示窗体的大文本框中。
二、部分程序关键源代码及注释 rivate Sub Command1_Click()Form2.Show
End Sub
Private Sub Command2_Click()
职工信息管理系统设计报告(VB)编号:22 List1.Clear End Sub
Private Sub Command3_Click()e = True Unload Me End Sub
Private Sub Command4_Click()List1.Clear If Text3.Text = “117001” Then List1.AddItem “张三 117001” ElseIf Text3.Text = “117002” Then List1.AddItem “李四 117002” ElseIf Text3.Text = “117003” Then List1.AddItem “王五 117003” ElseIf Text3.Text = “117004” Then List1.AddItem “王六 117004” ElseIf Text3.Text = “117005” Then List1.AddItem “赵七 117005” ElseIf Text3.Text = “117006” Then List1.AddItem “李八 117006” ElseIf Text3.Text = “117007” Then List1.AddItem “刘九 117007” ElseIf Text3.Text = “117008” Then List1.AddItem “马十
117008” Else: MsgBox “请输入正确的职工号” End If
职工信息管理系统设计报告(VB)编号:22 End Sub
Private Sub Command5_Click()Dim a As String Dim b As String b = InputBox(“请输入要修改的职工的职工号”)a = InputBox(“请输入新的职工姓名”)
If b = “117001” Then List1.AddItem a & “
” & b ElseIf b = “117002” Then List1.AddItem a & “
” & b ElseIf b = “117003” Then List1.AddItem a & “
” & b ElseIf b = “117004” Then List1.AddItem a & “
” & b ElseIf b = “117005” Then List1.AddItem a & “
” & b ElseIf b = “117006” Then List1.AddItem a & “
” & b ElseIf b = “117007” Then List1.AddItem a & “
” & b ElseIf b = “117008” Then List1.AddItem a & “
” & b Else: MsgBox “请输入正确的职工号” End If
List1.AddItem a & “
” & b End Sub
职工信息管理系统设计报告(VB)编号:22 Private Sub Command6_Click()List1.Clear If Text2.Text = “张三” Then List1.AddItem “张三 117001” ElseIf Text2.Text = “李四” Then List1.AddItem “李四 117002” ElseIf Text2.Text = “王五” Then List1.AddItem “王五 117003” ElseIf Text2.Text = “王六” Then List1.AddItem “王六 117004” ElseIf Text2.Text = “赵七” Then List1.AddItem “赵七 117005” ElseIf Text2.Text = “李八” Then List1.AddItem “李八 117006” ElseIf Text2.Text = “刘九” Then List1.AddItem “刘九 117007” ElseIf Text2.Text = “马十” Then List1.AddItem “马十
117008” Else: MsgBox “请输入正确的职工姓名” End If End Sub
Private Sub Command7_Click()Dim a As String Dim b As String a = InputBox(“请输入要修改的职工姓名”)b = Str(InputBox(“请输入新职工号”))
If a = “张三” Then List1.AddItem a & “
” & b
职工信息管理系统设计报告(VB)编号:22 ElseIf a = “李四” Then List1.AddItem a & “
” & b ElseIf a = “王五” Then List1.AddItem a & “
” & b ElseIf a = “王六” Then List1.AddItem a & “
” & b ElseIf a = “赵七” Then List1.AddItem a & “
” & b ElseIf a = “李八” Then List1.AddItem a & “
” & b ElseIf a = “刘九” Then List1.AddItem a & “
” & b ElseIf a = “马十” Then List1.AddItem a & “
” & b Else: MsgBox “请输入正确的职工姓名” End If End Sub
Private Sub Command8_Click()Dim a As String Dim b As String
a = InputBox(“请输入新员工姓名”)b = InputBox(“请输入新员工的职工号”)
List1.AddItem a & “
” & b End Sub Private Sub Combo2_Change()Select Case Comb2.Text
职工信息管理系统设计报告(VB)编号:22 Case “*.txt” File1.Pattern = “*.txt” Case “*.ini” File1.Pattern = “*.ini” Case “*.doc” File1.Pattern = “*.doc” Case “*.*” File1.Pattern = “*.*” End Select End Sub
Private Sub Command1_Click()Dim fileno As Integer, strl As String fileno = FreeFile Open “职工信息.txt” For Input As #fileno i = 0 Do While Not EOF(fileno)Input #fileno, str1 Form1.List1.AddItem str1
i = i + 1 Loop Close #fileno Form1.Show Me.Hide End Sub
Private Sub Command2_Click()Form1.Show End Sub
职工信息管理系统设计报告(VB)编号:22
Private Sub Drive1_Change()Dir1.Path = Drive1.Drive End Sub
Private Sub File1_Click()Text3.Text = File1.FileName End Sub
Private Sub VScroll1_Change()Form1.Show End Sub
三、设计方案的完善及目前存在的问题
1.设计方案要完善的地方
追加的信息无法加载到“职工信息txt”里 查询只是单一的一对一输入,不智能 文件类型的筛选问题暂未处理办法 2.目前存在的问题
只是简单的查询,不适合大量数据的导入与导出,不方便查看
四、本次设计的收获及心得体会
第一次尝试程序的制作,觉得非常有意思,做成功以后很有成就感,我还发现,程序制作出来的好坏直接影响使用者的工作效率,好的软件可以使用户事半功倍,对程序的运作体系越了解,设计的软件越智能,越能更好的服务于使用者,好好学习VB计算机语言,是磨刀不误砍柴工的体现。
五、对该题目和VB设计的意见和建议
1.对该题目的意见和建议
Form2中的文件类型,有些偏难,在少数文件夹的情况下可以不用通过文件类型的筛选 2.对本次设计的意见和建议
对此次课程设计的时间安排应更具体,应有相应的素材图片,增添软件的美感
第二篇:职工信息管理系统源代码
#include
intnum;
/*定义一个职工信息的结构体*/ char name[20];
/*定义一个职工信息的结构体*/
char sex[10];
//用字符串存放职工的性别数据
char birth[20];//用字符串存放职工的出生年月数据
char deta[20];//用字符串存放职工的工作年月数据
char education[20];//用字符串存放职工的学历数据
double salary;
//用字符串存放职工的性别数据
char work[30];//用字符串存放职工的职务数据
char addr[20];//用字符串存放职工的地址数据
char tel[20];//用字符串存放职工的电话数据 }worker[100];//用结构体数组存放职工的所有信息 void menu();
void input();
void save();
void read();
void display();
void add();
void search();
voidsearch_education();
voidsearch_num();
void del();
void modify();
void main()
{ char s;
system(“color 3f”);
printf(“nn”);
printf(“ t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓n”);
printf(“ t┃**********************************************************┃n”);
printf(“ t┃***┏━━━━━━━━━━━━━━━━━━━━━━━━┓***┃n”);
printf(“ t┃***┃************************************************┃***┃n”);
printf(“ t┃***┃***
****┃***┃n”);
printf(“ t┃***┃***
欢迎使用职工信息管理系统
****┃***┃n”);
printf(“ t┃***┃***
****┃***┃n”);
printf(“ t┃***┃***
****┃***┃n”);
printf(“ t┃***┃***
制作人吴青伶
****┃***┃n”);
printf(“ t┃***┃***
****┃***┃n”);
printf(“ t┃***┃***
2013.12.28
****┃***┃n”);
printf(“ t┃***┃***
****┃***┃n”);
printf(“ t┃***┃************************************************┃***┃n”);
printf(“ t┃***┗━━━━━━━━━━━━━━━━━━━━━━━━┛***┃n”);
printf(“ t┃**********************************************************┃n”);printf(“ t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛n”);do { menu();printf(“Do you want to continue?(y/n)”);
s=getchar();}while(s=='Y'||s=='y');} void menu()/*菜单函数*/ { int b;printf(“t
n”);printf(“t
n”);printf(“t
n”);printf(“t
n”);printf(“t
n”);printf(“t
请选择
n”);printf(“t
------------------------------n”);printf(“t
||
||
n”);printf(“t
||
1.职工信息录入
||
n”);printf(“t
||
2.职工信息浏览
||
n”);printf(“t
||
3.职工信息添加
||
n”);printf(“t
||
4.职工信息查询
||
n”);printf(“t
||
5.职工信息删除
||
n”);printf(“t
||
6.职工信息修改
||
n”);printf(“t
||
0.退出
||
n”);printf(“tn”);printf(“n 输入你的选择项(0~6):n”);
scanf(“%d”,&b);
switch(b)
{
case 1 : //职工信息录入、保存
input();
save();
getchar();
break;
case 2 ://读入职工信息并显示
read();
display();
getchar();break;
case 3 : //添加职工信息
add();getchar();break;
case 4 : //查询职工信息
search();getchar();break;
case 5 : //读入职工信息并实现职工信息删除功能
read();
del();
getchar();
break;
case 6 : //读入职工信息并修改职工信息
read();modify();getchar();break;
case 0 : exit(0);//退出
default:break;} } void input()
//录入职工信息 {
inti,flag,j;printf(“输入职工个数(默认个数为2):”);scanf(“%d”,&N);fflush(stdin);//清除缓存 for(i=0;i { loop: printf(“职工号:”);scanf(“%d”,&worker[i].num);fflush(stdin);flag=1;if(worker[N].num<0) printf(“请输入正整数:n”);else for(j=0;j { if(worker[i].num==worker[j].num) { flag=0; printf(“ 工号重复,请重新输入!n”); goto loop; } } printf(“姓名:”);scanf(“%s”,worker[i].name);fflush(stdin);printf(“性别:”);scanf(“ %s”,worker[i].sex);fflush(stdin);printf(“出生年月:”);scanf(“%d”,&worker[i].birth);fflush(stdin);printf(“工作年月:”);scanf(“%lf”,&worker[i].deta);fflush(stdin);printf(“请输入学历(中专=zz,大专=dz,本科=bk,研究生=yjs):n”);scanf(“%s”,worker[i].education);fflush(stdin);printf(“工资:”);scanf(“%lf”,worker[i].salary);fflush(stdin);printf(“职务:”);scanf(“%s”,worker[i].work);fflush(stdin);printf(“住址:”);scanf(“%s”,worker[i].addr);fflush(stdin);printf(“电话:”);scanf(“%s”,worker[i].tel);fflush(stdin); } printf(“n创建完毕!n”);} void save() //保存函数 { FILE *fp;int i; if((fp=fopen(“worker.txt”,“wb”))==NULL)//以只写方式打开一个二进制文件 { printf(“ncannot open filen”); exit(0);} for(i=0;i void read() //读入函数 { FILE *fp;int i=0; if((fp=fopen(“worker.txt”,“rb”))==NULL)//以只读方式为输出打开磁盘文件中的一个二进制文件 { printf(“ncannot open filen”); exit(0);} do{ fread(&worker[i],sizeof(struct worker),1,fp);//从worker.txt文件向内存读入数据(二进制) i++;}while(!feof(fp));fclose(fp); N=i-1;} void display() //信息浏览函数 { int i;for(i=0;i { printf(“职工号:%dn”,worker[i].num);printf(“姓名:%sn”,worker[i].name);printf(“性别:%sn”,worker[i].sex);printf(“出生年月:%dn”,worker[i].birth);printf(“工作年月:%dn”,worker[i].deta);printf(“学历:%sn”,worker[i].education);printf(“工资:%lfn”,worker[i].salary);printf(“职务:%dn”,worker[i].work);printf(“住址:%sn”,worker[i].addr);printf(“电话:%sn”,worker[i].tel); } } void add() //添加函数 { FILE *fp;int i;struct worker p;double t;printf(“n请输入新增加职工的信息:n”); printf(“请输入职工号:n”); scanf(“%d”,&p.num); for(i=0;i { while(worker[i].num==p.num) { printf(“ 工号重复,请重新输入!n”); scanf(“%d”,&p.num); } } printf(“请输入姓名:n”);scanf(“%s”,p.name);printf(“请输入性别:n”);scanf(“%s”,p.sex);printf(“请输入出生年月:n”);scanf(“%d”,&p.birth);printf(“请输入工作年月:n”);scanf(“%d”,&p.deta);printf(“请输入学历(中专=zz,大专=dz,本科=bk,=yjs:):n”);scanf(“%s”,p.education);printf(“请输入工资:n”);scanf(“%lf”,&t);p.salary=t;printf(“请输入职务:n”);scanf(“%s”,p.work);printf(“请输入住址:n”);scanf(“%s”,p.addr);printf(“请输入电话:n”);scanf(“%s”,p.tel);printf(“n添加完毕!n”); if((fp=fopen(“worker.txt”,“ab”))==NULL)//以追加方式打开一个二进制文件尾部 { printf(“ncannot open filen”);exit(0); } fwrite(&p,sizeof(struct worker),1,fp);fclose(fp);} void search() //查询函数 { int c;do { puts(“nsearch by=>n1.学历2.职工号3.取消并返回”);printf(“Which you needed?:n”);scanf(“%d”,&c); 研究生if(c>3||c<1) { puts(“nchoiceerror!please again!”);getchar();//此语句用于接受在执行上一句时最后输出的回车符 } } while(c>3||c<1); { switch(c) { case 1:search_education();break;case 2:search_num();break;case 3:menu();break; } } } void search_education() //按学历查询函数 { inti,flag=0;char s[10];printf(“n请输入你要查询的学历:n”);scanf(“%s”,s);for(i=0;i { if(strcmp(s,worker[i].education)==0) { printf(“职工号:%dn”,worker[i].num); printf(“姓名:%sn”,worker[i].name); printf(“性别:%sn”,worker[i].sex); printf(“出生年月:%dn”,worker[i].birth); printf(“工作年月:%dn”,worker[i].deta); printf(“学历(中专=zz,大专=dz,yjs):%sn”,worker[i].education);printf(“工资:%lfn”,worker[i].salary);printf(“职务:%lfn”,worker[i].work); printf(“住址:%sn”,worker[i].addr); printf(“电话:%sn”,worker[i].tel);flag++; } } if(flag==0) printf(“n对不起没有找到!n”);getchar();} void search_num() //按工号查询函数 { inti,s,flag=0;printf(“n输入要查询的职工号!:n”);scanf(“%d”,&s); 本科=bk,研究生=for(i=0;i { if(s==worker[i].num) { printf(“职工号:%dn”,worker[i].num); printf(“姓名:%sn”,worker[i].name); printf(“性别:%sn”,worker[i].sex); printf(“出生年月:%dn”,worker[i].birth); printf(“工作年月:%dn”,worker[i].deta); printf(“学历(中专=zz,大专=dz,本科=bk,研究生=yjs):%sn”,worker[i].education); printf(“工资:%lfn”,worker[i].salary);printf(“职务:%lfn”,worker[i].work); printf(“住址:%sn”,worker[i].addr); printf(“电话:%sn”,worker[i].tel); flag++; } } if(flag==0)printf(“n对不起没有找到!please”); getchar();} void del() //删除函数 { inti,j;FILE *fp;char name[20];char c;if((fp=fopen(“worker.txt”,“wb”))==NULL)//以只写方式打开一个二进制文件 { printf(“ncannot open filen”);exit(0); } printf(“请输入要删除的职工的姓名:”);scanf(“%s”,name);for(i=0;i if(strcmp(name,worker[i].name)==0)//判断输入的姓名和原来的姓名是否相同 { printf(“找到该职工,是否删除?(y/n)”); fflush(stdin); scanf(“%c”,&c); if(c =='Y'||c=='y') { for(j=i;j worker[j]=worker[j+1]; printf(“删除成功!n”); //break; } } } if(i>=N){ printf(“没有找到该职工!n ”); return;} else { N=N-1; for(i=0;i if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1) { printf(“ncannot save filen”);getchar(); } fclose(fp);} } void modify() //修改函数 { struct worker p;FILE *fp;inti,n;double t;printf(“n输入要修改的职工号:n”);scanf(“%d”,&n); for(i=0;i if(n==worker[i].num) { printf(“找到该职工的信息(任意键继续)!”); printf(“n请输入职工的信息!n”); printf(“请输入姓名:n”);scanf(“%s”,p.name); printf(“请输入性别:n”);scanf(“%s”,p.sex); printf(“请输入出身年月:n”);scanf(“%d”,&p.birth);printf(“请输入工作年月:n”);scanf(“%lf”,&p.deta); printf(“请输入学历(中专=zz,大专=dz,yjs):n”);scanf(“%s”,p.education);printf(“请输入工资:n”);scanf(“%lf”,&t); p.salary=t;printf(“请输入职务:n”);scanf(“%s”,p.work); printf(“请输入住址:n”);scanf(“%s”,p.addr); 本科=bk,研究生= } printf(“请输入电话:n”);scanf(“%s”,p.tel);p.num=n; if((fp=fopen(“worker.txt”,“r+”))==NULL)//以读写的方式将修改的信息写入磁盘文件 { printf(“ncannot open filen”); exit(0); } fseek(fp,i*sizeof(struct worker),0);//将位置指针移到i*sizeof(struct worker)个字节处 fwrite(&p,sizeof(struct worker),1,fp); fclose(fp); printf(“修改成功!n”); break;} } if(i>=N)printf(“n未找到该职工!n”); 题目:职工信息系统 功能包括: 建立职工信息数据(职工编号,姓名,性别,年龄,电话,职务,工资和家庭成员信息)和信息简表(编号,姓名,电话) 根据职工编号查询职工信息(查询时需要身份确认。单位领导和人事秘书可以看到职工所有信息;财务处人员可以看到职工编号,姓名,性别,年龄,电话,工资;一般职工仅能查到信息简表) 增加新职工信息(由人事秘书完成,需要身份确认) 删除职工信息(由人事秘书完成,需要身份确认) 修改职工工资(由财务处人员完成,需要身份确认) 要求所有信息能够存储在文件中,并具有良好的用户界面 #include //ct用来储存文件中数据组数,Admin用来储存登陆后该用户的权限,//na用来储存登录所输的编号,方便主菜单内使用其显示当前用户 void hline(int);inline void eatline(){while(cin.get()!='n')continue;} class staff {/*职工编号,姓名,性别,年龄,职务,电话,工资和家庭成员信息*/ public: };void staff::printf() //输出的选择,判断其职务,选择调用哪个输出 { if(Admin==1||Admin==2)printf1();else int num;char name[LIM],sex[3];int age;char job[10],phone[15];double wages;char home[20];int admin;void printf();void printf1();void printf2();void printf3(); } if(Admin==3)printf2();else printf3();void staff::printf1() //领导及人事秘书能见的输出 { } void staff::printf2() //财务人员能见的输出 { } void staff::printf3() //普通员工能见的输出 { cout< switch(n){ case 1:{cout< < };break;case 2:{cout< };break;case 3:{cout< } } < };break;void menu() //主菜单 { cout<<“t╔╤╤╤╤╤╤职工编号: ”< //二级菜单 { cout<<“t╔╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤┐”< //登陆的实现部分 { cout<<“t┏┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┓”< int w=0;while(!(cin>>na)){ cin.clear();while(cin.get()!='n')continue;cout<<“输入有误,编号为一串数字,请重新输入:n”; for(int i=1;i<=ct;i++)} fstream find;find.open(file,ios_base::in|ios_base::out|ios_base::binary);eatline();staff stu; { streampos place =(i-1)* sizeof stu;find.seekp(place);if(find.fail()){ cerr << “■查找出错!程序将退出!■n”;system(“pause”); exit(EXIT_FAILURE); } find.read((char *)&stu, sizeof stu);if(stu.num==na){ } w=1;Admin=stu.admin;} if(w==0){cout<<“t┣╋**登录失败!未找到相应的信息!程序将退出**╋┫”< } int stu_num() //计算数据组数 { } staff stu;ifstream stunum;stunum.open(file,ios_base::in|ios_base::binary);if(stunum.is_open()){ } stunum.close();return ct;stunum.seekg(0);while(stunum.read((char *)&stu,sizeof stu))ct++;system(“pause”);system(“cls”);void setadmin(staff &stu,char jobs[10]) //增加职工时根据职务设置权限 { char job1[10]=“总经理”;char job2[10]=“副总经理”;char job3[10]=“人事秘书”;char job4[10]=“财务人员”; } void add() // 输入数据的函数,增加职工 { if(Admin==2){ staff stu;if((!strcmp(stu.job,job1))||(!strcmp(stu.job,job2)))stu.admin=1;else if(!strcmp(stu.job,job3))stu.admin=2;else if(!strcmp(stu.job,job4))stu.admin=3; ofstream fout(file, ios_base::out | ios_base::app | ios_base::binary); if(!fout.is_open()) { cerr << “不能打开 ” << file << “ 文件:n”; exit(EXIT_FAILURE); } cout << “★增加职员信息★请输入职工姓名:(按Enter键退出输入!):n”;eatline(); cin.get(stu.name, LIM); while(stu.name[0]!= ' ') { cout << “★增加职员信息★请输入职工编号:”; cin>>stu.num;cout << “★增加职员信息★请输入职工性别:”;eatline();cin.get(stu.sex, 3);cout << “★增加职员信息★请输入职工年龄:”;cin>>stu.age; cout << “★增加职员信息★请输入职工职务:”;eatline();cin.get(stu.job, 10); cout << “★增加职员信息★请输入职工电话:”;eatline(); cin.get(stu.phone, 15); cout << “★增加职员信息★请输入职工工资:”;cin>>stu.wages; cout << “★增加职员信息★请输入职工家庭信息:(按Enter键退出输入!):n”; eatline(); cin.get(stu.home, 20);setadmin(stu,stu.job); fout.write((char *)&stu, sizeof stu);cout << “■增加职员信息■请输入职工姓名:(按Enter键退出输入!):n”; eatline();cin.get(stu.name,LIM); } fout.close(); } else cout<<“******************无权限,请与人事部秘书联系*******************************”< void output() //输出全部职工信息的函数 { staff stu; } ifstream find;find.open(file,ios_base::in|ios_base::binary);hline(1);while(find.read((char *)&stu,sizeof stu)){ cout< < //修改数据函数 { if(Admin==3){ fstream change; int w=0;staff stu;streampos place; change.open(file,ios_base::in|ios_base::out|ios_base::binary);if(change.eof())change.clear(); //清除EOF cout<<“请输入你要修改的职员编号:”< place =i* sizeof stu;change.seekg(place);if(change.fail()){ cerr << “■查找出错!程序将退出!■n”;system(“pause”); exit(EXIT_FAILURE); } change.read((char *)&stu, sizeof stu);if(stu.num==rec){ } w=1; cout << “你选择的是:n”;stu.printf2();break; } if(w==1){ cout << “请输入你要修改职员的工资: ”;while(cin >> stu.wages){ if(stu.wages<0||stu.wages>100000) { cout<<“■输入的工资错误!请重新输入:■ cin.clear(); while(cin.get()!='n'); continue; } break;} change.seekp(place); // 回到查找到的地点 change.write((char *)&stu, sizeof stu)<< flush;if(change.fail()){ cerr << ”■--查找失败!程序将退出--■n“;system(”pause“); n”; } exit(EXIT_FAILURE);} change.close();cout<<“★---修改成功!---★”< void del() //删除指定编号的职工信息 { if(Admin==2){ while(1){ eatline();int delnum;cout<<“请输入你要删除的职工的编号:n”; cin>>delnum;fstream in;in.open(“staff.dat”,ios_base::in|ios_base::binary);if(!in){ cout<<“打开失败”;return;} fstream temp;temp.open(“temp.dat”,ios_base::out|ios_base::binary);staff stu;int q;in.read((char*)&stu,sizeof(stu));while(!in.eof())//将文件内容修改后临时寸到另一个文件中 { } in.close();temp.close();//修改完成,将原文件清空,并将临时文件内容q=0;if(stu.num==delnum){ } if(q==0)temp.write((char*)&stu,sizeof(stu));in.read((char*)&stu,sizeof(stu));q=1;复制回原文件 中 } { out.write((char*)&stu,sizeof(stu));temp.read((char*)&stu,sizeof(stu));out.open(“staff.dat”,ios_base::out|ios_base::trunc|ios_base::binary);temp.read((char*)&stu,sizeof(stu));while(!temp.eof())//将文件内容修改后临时寸到另一个文件 temp.open(“temp.dat”,ios_base::in|ios_base::binary);if(!temp){ cout<<“打开失败”;return;} ofstream out;}//完成复制 out.close();temp.close(); cout<<“删除成功!t是否继续删除?y/nn”;char x;cin>>x;if(!(x=='y'||x=='Y'))break;} else cout<<“****************无权限,请与人事部秘书联系*****************************”< void find() //查找职工的实现部分 { while(1){ menu2();//eatline();int a;int w=0;cin>>a;int na;char sna[LIM];fstream find;find.open(file,ios_base::in|ios_base::out|ios_base::binary);eatline();staff stu;switch(a){ case 1:cout<<“请输入职工编号:”< case 2:cout<<“请输入职工姓名:”< if(Admin==1||Admin==2)output();else cout<<“**************无权限,请与单位领导或人事部秘书联系********************”< }break;default:{ } for(int i=1;i<=ct;i++){ streampos place =(i-1)* sizeof stu;find.seekp(place);if(find.fail()){ cout<<“■选择执行的操作错误!■n”;cin.clear();while(cin.get()!='n');continue;} cerr << “■查找出错!程序将退出!■n”;system(“pause”); exit(EXIT_FAILURE);} find.read((char *)&stu, sizeof stu);switch(a){ case 1:if(stu.num==na){ w=1; stu.printf();};break;case 2:if(!strcmp(stu.name,sna)) { w=1; stu.printf(); };break;case 3:break;default:{ cout<<“■选择执行的操作错误!■ cin.clear(); while(cin.get()!='n');continue; } } } n”; } if(w==0)cout<<“■未找到此人!■”< 职工所有信息;财务处人员可以看到职工编号,姓名,性别,年龄,电话,工资;一般职工仅能查到信 息简表) 增加新职工信息(由人事秘书完成,需要身份确认) 删除职工信息(由人事秘书完成,需要身份确认) 修改职工工资(由财务处人员完成,需要身份确认) 要求所有信息能够存储在文件中,并具有良好的用户界面 */ int main(){ system(“color 6F”);ifstream fin;fin.open(file,ios_base::in|ios_base::binary);if(!fin.is_open()){ staff st[5]={ {10001,“张三”,“男”,35,“总经理”,“***”,20000,“父母,弟弟,姐姐”,1},{10002,“李四”,“男”,32,“副总经理”,“***”,12000,“父母,兄长”,1},{10003,“ 王 婷 ”,“ 女 ”,25,“ 人 事 秘 书”,“***”,10000,“---略---”,2},{10004,“陈六”,“女”,25,“财务人员”,“***”,8000,“---略---”,3},{10005,“Obama”,“ 男 ”,23,“ 普 通 职 工”,“***5”,7000,“---略---”,0}};ofstream fout(file,ios_base::out|ios_base::binary); for(int i=0;i<5;i++)fout.write((char *)&st[i],sizeof st[i]);fout.close();} fin.close();stu_num();loading();while(1){ menu();cout<<“请输入你要选择的操作: char n;cin>>n;switch(n){ case '1':eatline();find();break;case '2':add();break;case '3':del();break;case '4':change();break;case '5':exit(EXIT_FAILURE); n ”; default:{ cout<<“■选择执行的操作错误!■n”; cin.clear(); while(cin.get()!='n'); continue;} 清除已经输入的内容,程序选择 } system(“pause”); system(“cls”); cin.clear();} return 0;} //如果选择错误,cin.clear等语句 软件技术专业 计算机应用基础课程设计任务书 (13级) 题目:职工信息管理系统 学生姓名:学号:班级: 题目类型:软件工程(R)指导教师: 一. 课程设计的题目简介 该设计要求学生以某企业职工信息管理业务为背景,设计、开发一套“职工信息管理系统”软件。 通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,针对c语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。得到软件工程的综合训练,提高解决实际问题的能力。 二. 课程设计的任务 1、查阅文献资料,一般在5篇以上; 2、以某企业职工信息管理业务为背景,通过调研、分析现有的管理模式和已有的管理软件,建立系统模型; 3、完成软件结构设计和算法设计; 4、完成系统的软件开发和测试工作; 5、撰写设计说明书; 6、做好答辩工作。 三. 课程设计的主要内容、功能及技术指标 1、问题分析及解决方案框架确定:充分地分析和理解问题本身,弄清要求做什么。在确定解决方案框架过程中,综合考虑系统功能,考虑怎样使系统结构清晰、合理、简单和易于调试。最后确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系,并画出函数之间的调用关系图。 2、详细设计和编码:定义相应的存储结构,确定各个函数的算法,并画出 流程图,在此基础上进行代码设计,每个明确的功能模块程序一般不超过60行,否则要进一步划分。 3、上机前程序静态检查:上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。静态检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。把程序中的明显错误事先排除。 4、程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果。 5、完成课程设计报告 ① 需求和规格说明:设计题目和问题描述:题目要解决的问题是什么; ② 设计思路:主要算法思想,程序功能图,函数之间的调用关系图;设计表示:每个函数或过程的功能,列出每个过程或函数所调用的过程或函数,并画出各函数的流程图; 详细设计:主要算法的伪代码; ③ 调试报告:调试过程中遇到的主要问题,是如何解决的;对设计和编码的回顾讨论和分析;改进设想;经验和体会等; ④ 程序实现注释; ⑤ 附录:源程序清单和结果。如果题目规定了测试数据,则结果要求包含这些测试数据和运行输出,当然还可以含其他测试数据和运行输出。 6、职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。设计“职工信息管理系统”,使之能提供以下功能: 系统以菜单方式工作; 职工信息录入功能(职工信息用文件保存); 职工信息浏览功能; 查询和排序功能:(至少一种查询方式)按工资查询、按学历查询等;职工信息的删除与修改。 四. 课程设计提交的成果 1.设计说明书一份,内容包括: 1)中文摘要100字;关键词3-5个; 2)前言; 3)系统分析(包含需要的系统流程图); 4)系统总体设计(包含总体软件结构图、总体数据结构); 5)详细设计; 6)系统测试(包含测试方案、测试用例、测试结果及软件可靠性分析); 7)软件使用说明书(核心界面说明); 8)设计总结、参考文献、致谢等。 2.刻制光盘一张。 五. 课程设计的主要参考文献 1C/C++程序设计教程(第二版),王连相,中国铁道出版社,2011 2C语言程序设计,谭浩强,清华大学出版社,1999 3C程序设计题解与上机指导,谭浩强,清华大学出版社,1999 4C/C++程序设计上机指导与测试(第二版),王连相,中国铁道出版社,2011 5C语言函数手册,机械工业出版社,1999 6C语言的实际应用,安徽科学技术出版社,2000 2014年1月13日 #include const N=5000;// 定义系统可录入的职工最大数值 string Ename[N];long Enum[N];char Esex[N];int Eage[N]; char Emarriage[N];int Edepart[N];int Eposition[N];int Edegree[N];int Eworktime[N];float Epay[N]; class Employee { public: string Employeename; long Employeenum; char Employeesex; int Employeeage; char Employeemarriage; int Employeedepart; int Employeeposition; int Employeedegree; int Employeeworktime; float Employeepay; static long EmployeeMaxNum; static float EmployeeBasePay; void NewInfo(); void ShowInfo(); void showall(); void showdepart(int depart); void showdegree(int degree); void showage(int min,int max); void shownum(long number); void RefreshInfo(); void DeleteInfo(); float Pay(int Employeegrade); static int MaxNum();}; class DBOperate { public: string Employeename; long Employeenum; char Employeesex; int Employeeage; char Employeemarriage; int Employeedepart; int Employeeposition; int Employeedegree; int Employeeworktime; float Employeepay; static long EmployeeMaxNum; static float EmployeeBasePay; void WriteIn(int iflag); void ReadOut(); void RefreshMaxNum(int iflag);//iflg=1 or-1 or 0 }; long Employee::EmployeeMaxNum = 1000;float Employee::EmployeeBasePay = 1500; int Employee::MaxNum()//返回系统已经存储的人数 { int MN = 0; ifstream myf; myf.open(“EmployeeMaxNum.txt”); myf>>MN; cout< myf.close(); return MN;} void Employee::NewInfo()//添加新职工函数 { cout<<“新职工姓名: ”; cin>>Employee::Employeename; Employee::Employeenum = EmployeeMaxNum + Employee::MaxNum()+1; cout<<“新职工性别(F为女性,M为男性): ”; cin>>Employee::Employeesex; cout<<“新职工年龄: ”; cin>>Employee::Employeeage; cout<<“新职工婚姻状况(Y为已婚,N为未婚): ”; cin>>Employee::Employeemarriage; cout<<“新职工学历,请输入相应学历的序号: ”< cout<<“ [1:小学 2:初中 3:高中 4:本科 5:硕士 6:博士] ”; cin>>Employee::Employeedegree; while(Employee::Employeedegree!=1&&Employee::Employeedegree!=2&&Employee::Employeedegree!=3&&Employee::Employeedegree!=4&&Employee::Employeedegree!=5&&Employee::Employeedegree!=6) { cout<<“输入有误,请重新输入:”< cout<<“ [1:小学 2:初中 3:高中 4:本科 5:硕士 6:博士] ”; cin>>Employee::Employeedegree; } cout<<“新职工所在部门,请输入相应部门的序号:”< cout<<“ [1:董事会 2:销售部 3:人事部 4:客服中心 5:财务部 6:技术研发部 7:安全监察部] ”; cin>>Employee::Employeedepart; while(Employee::Employeedepart!=1&&Employee::Employeedepart!=2&&Employee::Employeedepart!=3&&Employee::Employeedepart!=4&&Employee::Employeedepart!=5&&Employee::Employeedepart!=6&&Employee::Employeedepart!=7) { cout<<“输入有误,请重新输入:”< cout<<“ [1:董事会 2:销售部 3:人事部 4:客服中心 5:财务部 6:技术研发部 7:安全监察部] ”; cin>>Employee::Employeedepart; } cout<<“新职工职位, 请输入相应职位的序号: ”< cout<<“ [1:临时职工 2: 正式职工 3:部门经理 4:主任 5:董事长] ”; cin>>Employee::Employeeposition; while(Employee::Employeeposition!=1&&Employee::Employeeposition!=2&&Employee::Employeeposition!=3&&Employee::Employeeposition!=4&&Employee::Employeeposition!=5) { cout<<“输入有误,请重新输入:”< cout<<“ [1:临时职员 2: 正式职员 3:部门经理 4:主任 5:董事长] ”; cin>>Employee::Employeeposition; } cout<<“新职工的工作时长(不需要输入单位): ”; cin>>Employee::Employeeworktime; Employee::Employeepay = Employee::Pay(Employee::Employeeposition); DBOperate dbo; dbo.ReadOut(); int MaxNum = Employee::MaxNum(); Enum[MaxNum] = Employee::Employeenum; Ename[MaxNum] = Employee::Employeename; Esex[MaxNum] = Employee::Employeesex; Eage[MaxNum] = Employee::Employeeage; Emarriage[MaxNum] = Employee::Employeemarriage; Edegree[MaxNum] = Employee::Employeedegree; Edepart[MaxNum] = Employee::Employeedepart; Eposition[MaxNum] = Employee::Employeeposition; Eworktime[MaxNum] = Employee::Employeeworktime; Epay[MaxNum] = Employee::Employeepay; dbo.WriteIn(1); cout<<“ 添加新成员成功!”< void Employee::ShowInfo()//程序主体 数据输出函数 { int choice1,choice2,min,max; long searchnum; Employee e; cout<<“*******************************************”< cout<<“-----------1.输出全体职工信息--------------”< cout<<“-----------2.按职工部门输出----------------”< cout<<“-----------3.按职工学历输出----------------”< cout<<“-----------4.按职工年龄输出----------------”< cout<<“-----------5.按职工编号输出----------------”< cout<<“*******************************************”< cout<<“ 请选择查询方式:”; cin>>choice1; switch(choice1) { case 1: showall();break; case 2: cout<<“请输入要查询职工的部门编号[1:董事会 2:销售部 3:人事部 4:客服中心 5:财务部 6:技术研发部 7:安全监察部] ”; cin>>choice2; e.showdepart(choice2);break; case 3: cout<<“请输入要查询职工的学历编号: [1:小学 2:初中 3:高中 4:本科 5:硕士 6:博士] ”; cin>>choice2; e.showdegree(choice2);break; case 4: cout<<“请输入要查询的年龄范围: ”; cout<<“最小值: ”; cin>>min; cout<<“最大值: ”; cin>>max; e.showage(min,max);break; case 5: cout<<“请输入要查询的职工编号: ”; cin>>searchnum; e.shownum(searchnum);break; default: cout<<“出错啦!”< } } void Employee::showall()//全体职工输出函数 { int i; long number; for(i=0;i { number = Enum[i]; shownum(number); } } void Employee::showdepart(int depart)//按职工所在部门输出函数 { int i; switch(depart) { case 1: cout<<“董事会的成员有: ”< case 2: cout<<“销售部的成员有: ”< case 3: cout<<“人事部的成员有: ”< case 4: cout<<“客服中心的成员有: ”< case 5: cout<<“财务部的成员有: ”< case 6: cout<<“技术研发部的成员有: ”< case 7: cout<<“安全监察部的成员有: ”< default: cout<<“输入错误!>”< } for(i=0;i { if(Edepart[i] == depart) { long number = Enum[i]; shownum(number); } else continue; } } void Employee::showdegree(int degree)//按职工学历输出函数 { int i; switch(degree) { case 1:cout<<“初中学历的员工有:”< case 2:cout<<“初中学历的员工有:”< case 3:cout<<“高中学历的员工有:”< case 4:cout<<“本科学历的员工有:”< case 5:cout<<“硕士学位的员工有:”< case 6:cout<<“博士学位的员工有:”< } for(i=0;i { if(Edegree[i] == degree) { long number = Enum[i]; shownum(number); } else continue; } } void Employee::showage(int min,int max)//按职工年龄段输出函数 { int i; for(i=0;i { if(Eage[i]>=min&&Eage[i]<=max) { long number = Enum[i]; shownum(number); } else continue; } } void Employee::shownum(long number)//按职工编号输出函数 { int i; for(i=0;i { if(Enum[i] == number) { cout<<“**********************************”< cout<<“职工编号:”< cout<<“姓 名:”< cout<<“性 别:”; if(Esex[i]=='F')cout<<“女 ”< else if(Esex[i]=='M')cout<<“男 ”< cout<<“年 龄:”< cout<<“婚姻情况:”; if(Emarriage[i]=='Y')cout<<“已婚 ”< else if(Emarriage[i]=='N')cout<<“未婚 ”< cout<<“学 历:”; switch(Edegree[i]) { case 1:cout<<“小 学 ”< case 2:cout<<“初 中 ”< case 3:cout<<“高 中 ”< case 4:cout<<“本 科 ”< case 5:cout<<“硕 士 ”< case 6:cout<<“博 士 ”< } cout<<“所在部门:”; switch(Edepart[i]) { case 1:cout<<“董事会 ”< case 2:cout<<“销售部 ”< case 3:cout<<“人事部 ”< case 4:cout<<“客服中心 ”< case 5:cout<<“财务部 ”< case 6:cout<<“技术研发部 ”< case 7:cout<<“安全监察部 ”< } cout<<“所任职务:”; switch(Eposition[i]) { case 1:cout<<“临时成员 ”< case 2:cout<<“正式员工 ”< case 3:cout<<“部门经理 ”< case 4:cout<<“主任 ”< case 5:cout<<“董事长 ”< } cout<<“工作时长:”< cout<<“工资:”< cout<<“**********************************”< } else continue; } } void Employee::RefreshInfo()//修改职工信息的函数 { int cNum = 1000; DBOperate dbo; dbo.ReadOut(); void Employee::shownum(long number); cout<<“请输入您要修改的职工编号:”; cin>>cNum; int MN; MN = Employee::MaxNum(); for(int i=0;i { if(Enum[i] == cNum) { Employee::shownum(cNum); cout<<“请输入该职工的新信息: ”< cout<<“职工姓名: ”;//录入职工的新的数据,职工编号保持不变 cin>>Employee::Employeename; Ename[i] = Employee::Employeename; cout<<“职工性别(F为女性,M为男性): ”; cin>>Employee::Employeesex; Esex[i] = Employee::Employeesex; cout<<“职工年龄: ”; cin>>Employee::Employeeage; Eage[i] = Employee::Employeeage; cout<<“职工婚姻状况(Y为已婚,N为未婚): ”; cin>>Employee::Employeemarriage; Emarriage[i] = Employee::Employeemarriage; cout<<“职工学历,请输入相应学历的序号:”< cout<<“ [1:小学 2:初中 3:高中 4:本科 5:硕士 6:博士] ”; cin>>Employee::Employeedegree; while(Employee::Employeedegree!=1&&Employee::Employeedegree!=2&&Employee::Employeedegree!=3&&Employee::Employeedegree!=4&&Employee::Employeedegree!=5&&Employee::Employeedegree!=6) { cout<<“输入有误,请重新输入:”< cout<<“ [1:小学 2:初中 3:高中 4:本科 5:硕士 6:博士] ”; cin>>Employee::Employeedegree; } Edegree[i] = Employee::Employeedegree; cout<<“职工所在部门,请输入相应部门的序号: ”< cout<<“ [1:董事会 2:销售部 3:人事部 4:客服中心 5:财务部 6:技术研发部 7:安全监察部] ”; cin>>Employee::Employeedepart; while(Employee::Employeedepart!=1&&Employee::Employeedepart!=2&&Employee::Employeedepart!=3&&Employee::Employeedepart!=4&&Employee::Employeedepart!=5&&Employee::Employeedepart!=6&&Employee::Employeedepart!=7) { cout<<“输入有误,请重新输入:”< cout<<“ [1:董事会 2:销售部 3:人事部 4:客服中心 5:财务部 6:技术研发部 7:安全监察部] ”; cin>>Employee::Employeedepart; } Edepart[i] = Employee::Employeedepart; cout<<“职工职位,请输入相应职位的序号:”< cout<<“ [1:临时职员 2: 正式职员 3:部门经理 4:主任 5:董事长] ”; cin>>Employee::Employeeposition; while(Employee::Employeeposition!=1&&Employee::Employeeposition!=2&&Employee::Employeeposition!=3&&Employee::Employeeposition!=4&&Employee::Employeeposition!=5) { cout<<“输入有误,请重新输入:”< cout<<“ [1:临时职员 2: 正式职员 3:部门经理 4:主任 5:董事长] ”; cin>>Employee::Employeeposition; } Eposition[i] = Employee::Employeeposition; cout<<“员工的工作时(不需要输入单位): ”; cin>>Employee::Employeeworktime; Eworktime[i] = Employee::Employeeworktime; Epay[i] = Employee::Pay(Employee::Employeeposition); break; } } dbo.WriteIn(0);} void Employee::DeleteInfo()//删除职工数据的函数 { char tmp; int cNum = 1000; DBOperate dbo; dbo.ReadOut(); void Employee::shownum(long number); cout<<“请输入您要删除的职工编号>: ”; cin>>cNum; int MN; MN = Employee::MaxNum(); for(int i=0;i { if(Enum[i] == cNum) Employee::shownum(cNum); } cout<<“确认要删除该职工信息?(Y为确认,N为放弃): ”; cin>>tmp; if(tmp=='Y') { if(i==MN-1) dbo.WriteIn(-1); else { for(int j=i;j { Enum[j] = Enum[j+1];} dbo.WriteIn(-1); } cout<<“ 删除操作成功!”< } } float Employee::Pay(int Employeeposition)//根据职工职位计算工资的函数 { float tmpPay; tmpPay = Employee::EmployeeBasePay + Employee::Employeeposition Employee::EmployeeBasePay; * return tmpPay;} void DBOperate::WriteIn(int iflag)//数据操作函数—写入 { DBOperate::RefreshMaxNum(iflag); ofstream myf(“Employee.txt”); Employee e; int MN; MN = e.MaxNum(); for(int i=0;i { myf< } myf.close(); return;} void DBOperate::ReadOut()//数据操作函数—读出 { ifstream myf(“Employee.txt”); Employee e; int MN; MN = e.MaxNum(); for(int i=0;i { myf>>DBOperate::Employeenum>>DBOperate::Employeename>>DBOperate::Employeesex>>DBOperate::Employeeage>>DBOperate::Employeemarriage >>DBOperate::Employeedegree>>DBOperate::Employeedepart>>DBOperate::Employeeposition>>DBOperate::Employeeworktime>>DBOperate::Employeepay; Enum[i] = DBOperate::Employeenum; Ename[i] = DBOperate::Employeename; Esex[i] = DBOperate::Employeesex; Eage[i] = DBOperate::Employeeage; Emarriage[i] = DBOperate::Employeemarriage; Edegree[i] = DBOperate::Employeedegree; Edepart[i] = DBOperate::Employeedepart; Eposition[i] = DBOperate::Employeeposition; Eworktime[i] = DBOperate::Employeeworktime; Epay[i] = DBOperate::Employeepay; } myf.close();} void DBOperate::RefreshMaxNum(int iflag)//更新系统中员工计数文件的函数 { int MaxNum = 0; ifstream myif(“EmployeeMaxNum.txt”); myif>>MaxNum; myif.close(); MaxNum = MaxNum+iflag; ofstream myof(“EmployeeMaxNum.txt”); myof< myof.close();} int main()//主函数 { system(“color B0”);//设置当前窗口的背景色和前景色 // 0 = 黑色 = 灰色 // 1 = 蓝色 = 淡蓝色 // 2 = 绿色 A = 淡绿色 // 3 = 浅绿色 B = 淡浅绿色 // 4 = 红色 C = 淡红色 // 5 = 紫色 D = 淡紫色 // 6 = 黄色 E = 淡黄色 // 7 = 白色 F = 亮白色 int select = 0; while(select!=5) { cout<<“ ╭————————————————————————————╮”< cout<<“ ∣ 《主菜单》 ∣”< cout<<“ ├————————————————————————————┤”< cout<<“ ∣ 1.新建并录入职工信息 ∣”< cout<<“ ∣ 2.按条件输出职工信息 ∣”< cout<<“ ∣ 3.修改指定职工的信息 ∣”< cout<<“ ∣ 4.删除职工信息 ∣”< cout<<“ ∣ 5.退出系统 ∣”< cout<<“ ╰————————————————————————————╯”< cout<<“ ——————————————————————————————”< cout<<“ 请选择您需要功能的代号: ”; cin>>select; Employee e; DBOperate dbo; switch(select) { case 1: e.NewInfo();break; case 2: dbo.ReadOut(); e.ShowInfo();break; case 3: e.RefreshInfo();break; case 4: e.DeleteInfo();break; case 5: cout<<“ 退出成功”< default: cout<<“命令错误!”< } if(select == 5) break; } exit(1); return 0;}第三篇:【课程设计】职工信息管理系统
第四篇:01-职工信息管理系统
第五篇:C++大作业_职工信息管理系统源代码