学了两个月的C语言和数据结构,花了三天时间,10月30号到11月1号,做了一个职工管理系统。这算是我人生中第一个项目吧,特此写下这篇文章来纪念这一时刻。(≧0≦)虽然我做的系统只能人工导入,大佬的好像都是数据库导入的’(°ー°〃)。但毕竟是个初学者,下面我就来分享一下我写的代码。<(* ̄▽ ̄*)/写的可能很烂,但能跑(bushi)。
#include<stdio.h>
#include<string.h> //strcmp()函数和strcpy()函数
#include<stdlib.h> //system()函数 //向控制台输入DOS命令
#include<conio.h> //getch()函数 //控制台不显示输入的数据
↑↑↑上面四个是这次系统要导入的函数包
#define MaxSize 100
typedef struct{
char num[11];//职工号
char name[10];//姓名
char sex[2];//性别
int age;//年龄
char phonenum[12];//手机号
char position[5];//职位
int money;//月薪
}ElemType; //职工基本信息
typedef struct{
ElemType data[MaxSize];//存放顺序表数据
int length;//存放顺序表长度
}SqList;
↑↑↑首先,职工表为顺序表,所以先定义顺序表中各节点的结构,这里的职工信息包括职工号,姓名,性别,年龄,手机号,职位,月薪。至于其他一些像出生日期,家庭住址之类,是可以加上上去的,但系统不正式,而且需要手动输入数据,为了测试方便,就不加入这些信息。另外C语言中开辟字符数组空间,长度应为实际空间n再加1,因为C语言字符数组在数组之后要加上字符"\0",会占据一个空间。我刚开始写这里的时候,以为字符有多长就开辟多大空间 ,所以在后期调试的时候,一直焦头烂额。这个应该是C语言基本知识,想不到,实在惭愧。
void InitList(SqList &L){
L.length = 0;
}
↑↑↑ 初始化顺序表。
//参数x发生变化,所以要加 &
void Input(ElemType &x){
printf("请输入职工号:");
scanf("%s",x.num);
printf("请输入姓名:");
scanf("%s",x.name);//char型 %s , 无 &
printf("请输入性别:");
scanf("%s",x.sex);
printf("请输入年龄:");
scanf("%d",&x.age);//int型 %d , 有 &
printf("请输入手机号:");
scanf("%s",x.phonenum);
printf("请输入职位:");
scanf("%s",x.position);
printf("请输入月薪:");
scanf("%d",&x.money);
}
↑↑↑ 因为每名职工的基本信息有很多,所以这里写一个函数,把所有要输入的信息包起来,让代码看起来更简洁。
//把实现某一功能的操作封装起来
void Printf_(){
printf("------------------------------------------------------------------------------------------------------------------------");
system("pause");
system("cls");
}
//1.1插入职工信息,顺序插入
int InsElem(SqList &L , ElemType x , int i){
L.data[ i - 1 ] = x; //将数据录入每一个节点
L.length++; //每录入一个数据,顺序表表长+1
return 1;
}
//1.2判断输入的信息是否有相同职工号
int Locate(SqList L,char number[11]){
int i = 0;//全局变量
while( i < L.length && strcmp(L.data[i].num,number) != 0 ) //找不到目标索引往后移
i++;
if ( i >= L.length)
return 0;
else{
return i + 1; //找到目标则返回数据的逻辑下标
}
}
//1.创建职工信息表
void Create(SqList &L){
if ( L.length != 0 ){
printf("\n>>职工表已存在,是否重新创建职工表。\t0否\t1是\n");
char k = getch(); //getch()函数,控制台接收一个字符,但不显示
if( k == '1' ){
printf(" >>开始创建新的职工信息表!\n");
system("pause"); //system()函数,向控制台输入一个DOS命令
InitList(L);
Create(L);
}else if ( k == '0' ){
printf(" >>拒绝创建新的职工信息表!\n");
Printf_();
}else{
printf(" >>非法输入\n");
Printf_();
}
}else{
int n;//接收要输入信息的职工人数
ElemType x;//定义职工基本信息
printf("\n >>职工人数:");scanf("%d",&n);
printf("\n开始录入%d个职工信息:\n",n);
for ( int i = 1 ; i <= n ; i++){
Input(x);
int k = Locate(L,x.num);//1.2
if ( k > 0){
printf("该职工号已存在,请重新输入!\n");
i--; //索引 i 减 1,重新输入刚刚的数据
continue;
}
InsElem(L,x,i); //插入线性表中
system("pause"); //每录完一个数据,系统暂停一下,提醒用户该数据以被录入系统
}
system("cls"); //录完所有数据后,用"cls"命令清屏,保持控制台美观
}
}
↑↑↑这个就是建表函数,如果顺序表已存在,会先提示表已存在,是否重新创建顺序表,若选择重新创建顺序表,则清空原来的表,重新执行建表函数。如果开始顺序表不存在,则询问录入多少个职工基本信息,然后人工依次输入职工基本信息,倘若途中输入的职工号重复,则提示职工号已存在,请重新输入刚刚的数据。
这里用到了strcmp()函数,用于比较两个字符串是否相等,若相等,返回 0;不相等则 !0 。 实际上是比较两个字符串中,每个字符ANSI码是否相同,若相同ANSI码的差值为0。
这里还用到了system()函数,用于向控制台输入DOS命令,善于使用system()函数可以让控制台更~~好看?我在写代码的时候就是不断调整system()函数的位置,来让控制台看起来更~~好看?
//5.输出所有职工信息
void DispList(SqList L){
if ( L.length == 0 ){
printf("\n >>当前职工信息表为空!\n\n");
}else{
printf("\n当前职工信息:\n");
printf("\t 职工号\t 姓名\t性别\t年龄\t 手机号\t职位\t月薪\n");
for ( int i = 0 ; i < L.length ; i++){
printf("\t%s\t%s\t %s\t %d\t%s\t%s\t%d\n",L.data[i].num,L.data[i].name,L.data[i].sex,L.data[i].age,L.data[i].phonenum,L.data[i].position,L.data[i].money);
}
printf("\n");
}
}
↑↑↑这个是输出总表的函数,非常简单,依次遍历每一个数据,然后输出即可。
//指令报错
void Error(){
printf("\n >>非法指令,请输入指令 1 ~ 8\n\n");
Printf_();
}
//2.查询功能
int Search(SqList L){
if ( L.length == 0){
printf("\n >>请先创建职工信息表!\n\n");
Printf_();
}else{
system("cls");//先清屏,再进入该菜单栏
printf("**************************\n");
printf("-----1.按职工号查询-------\n");
printf("-----2.按职工姓名查询-----\n");
printf("-----3.按职工性别查询-----\n");
printf("-----4.按职工年龄查询-----\n");
printf("-----5.按职工手机号查询---\n");
printf("-----6.按职工职位查询-----\n");
printf("-----7.按职工月薪查询-----\n");
printf("-----8.退出本菜单---------\n");
printf("**************************\n");
while(1){
int i;//全局变量,用于保存符合条件的索引
printf("请输入指令!\n");
char order = getch();
switch(order){
case '1':
char number[11];//存入输入的职工号,下面同理
printf("\n >>请输入要查询职工号:");scanf("%s",number);
printf("\t 职工号\t 姓名\t性别\t年龄\t 手机号\t职位\t月薪\n");
for ( i = 0 ; i < L.length ; i++ ){
if ( strcmp(L.data[i].num,number) == 0){
printf("\t%s\t%s\t %s\t %d\t%s\t%s\t%d\n",L.data[i].num,L.data[i].name,L.data[i].sex,L.data[i].age,L.data[i].phonenum,L.data[i].position,L.data[i].money);
}
}
Printf_();
return Search(L);
break;
case '2':
char name[10];
printf("\n >>请输入要查询姓名:");scanf("%s",name);
printf("\t 职工号\t 姓名\t性别\t年龄\t 手机号\t职位\t月薪\n");
for ( i = 0 ; i < L.length ; i++ ){
if ( strcmp(L.data[i].name,name) == 0){
printf("\t%s\t%s\t %s\t %d\t%s\t%s\t%d\n",L.data[i].num,L.data[i].name,L.data[i].sex,L.data[i].age,L.data[i].phonenum,L.data[i].position,L.data[i].money);
}
}
Printf_();
return Search(L);
break;
case '3':
char sex[2];
printf("\n >>请输入要查询性别:");scanf("%s",sex);
printf("\t 职工号\t 姓名\t性别\t年龄\t 手机号\t职位\t月薪\n");
for ( i = 0 ; i < L.length ; i++ ){
if ( strcmp(L.data[i].sex,sex) == 0){
printf("\t%s\t%s\t %s\t %d\t%s\t%s\t%d\n",L.data[i].num,L.data[i].name,L.data[i].sex,L.data[i].age,L.data[i].phonenum,L.data[i].position,L.data[i].money);
}
}
Printf_();
return Search(L);
break;
case '4':
int age;
printf("\n >>请输入要查询年龄:");scanf("%d",&age);
printf("\t 职工号\t 姓名\t性别\t年龄\t 手机号\t职位\t月薪\n");
for ( i = 0 ; i < L.length ; i++ ){
if ( L.data[i].age == age ){
printf("\t%s\t%s\t %s\t %d\t%s\t%s\t%d\n",L.data[i].num,L.data[i].name,L.data[i].sex,L.data[i].age,L.data[i].phonenum,L.data[i].position,L.data[i].money);
}
}
Printf_();
return Search(L);
break;
case '5':
char phonenum[12];
printf("\n >>请输入要查询的手机号:");scanf("%s",phonenum);
printf("\t 职工号\t 姓名\t性别\t年龄\t 手机号\t职位\t月薪\n");
for ( i = 0 ; i < L.length ; i++ ){
if ( strcmp(L.data[i].phonenum,phonenum) == 0){
printf("\t%s\t%s\t %s\t %d\t%s\t%s\t%d\n",L.data[i].num,L.data[i].name,L.data[i].sex,L.data[i].age,L.data[i].phonenum,L.data[i].position,L.data[i].money);
}
}
Printf_();
return Search(L);
break;
case '6':
char position[5];
printf("\n >>请输入要查询职位:");scanf("%s",position);
printf("\t 职工号\t 姓名\t性别\t年龄\t 手机号\t职位\t月薪\n");
for ( i = 0 ; i < L.length ; i++ ){
if ( strcmp(L.data[i].position,position) == 0){
printf("\t%s\t%s\t %s\t %d\t%s\t%s\t%d\n",L.data[i].num,L.data[i].name,L.data[i].sex,L.data[i].age,L.data[i].phonenum,L.data[i].position,L.data[i].money);
}
}
Printf_();
return Search(L);
break;
case '7':
int money;
printf("\n >>请输入要查询月薪:");scanf("%d",&money);
printf("\t 职工号\t 姓名\t性别\t年龄\t 手机号\t职位\t月薪\n");
for ( i = 0 ; i < L.length ; i++ ){
if ( L.data[i].money == money ){
printf("\t%s\t%s\t %s\t %d\t%s\t%s\t%d\n",L.data[i].num,L.data[i].name,L.data[i].sex,L.data[i].age,L.data[i].phonenum,L.data[i].position,L.data[i].money);
}
}
Printf_();
return Search(L);
break;
case '8':
system("cls");
return 0;
default:
Error();//指令报错
return Search(L);
break;
}
}
}
}
↑↑↑查询功能就是职工信息系统的重头戏了。想使用肯定要建立顺序表先的。有顺序表则进入查询功能的菜单栏,输入想要查询的对象,然后再输入查询的值。系统依次遍历顺序表,然后输出符合条件的数据。基本每个查询都是一样的思路。
字符串就用strcmp()函数比较,整型就直接判断就好。查询完返回该菜单栏下,如果不想查询,按下8即可。
//3.删除某一职工信息(信息表改变,要加 & )
void DelElem(SqList &L,int i){
if ( L.length == 0 ){
printf("\n >>当前职工表为空!无法删除职工信息!\n\n");
Printf_();
}else{
system("cls");
DispList(L);
printf("\n>>删除第i个职工信息:\n");
printf(">>>请输入i:");scanf("%d",&i);
if ( i < 1 || i > L.length){
printf("索引错误!\n");//想删除数据,当然要合法才行
Printf_();
}else{
for ( int j = i ; j < L.length ; j++){
L.data[ j - 1 ] = L.data[j]; //数据前移
}
L.length--;//长度-1
printf("删除成功!\n");
printf("\n >>职工表变为:\n\n");
DispList(L);
Printf_();
}
}
}
↑↑↑这个就是删除数据的算法,当然要先有顺序表才可以使用的。使用这个功能,先清屏,保持美观,然后输出总表,查看要删除的数据,最后输入要删除的数据即可。删除完后,再输出一次总表,查看删除后的数据。
//4.获取职工人数
void GetLength(SqList L){
printf("\n >>当前职工人数为:%d\n\n",L.length); //得到职工人数
Printf_();
}
↑↑↑输出职工人数,算法也十分简单。
//6.插入职工信息
void HalfInsElem(SqList &L , ElemType x , int i){
if( L.length == 0 ){
printf("\n >>请先创建职工信息表!\n\n");
Printf_();
}else{
system("cls");
DispList(L);
printf("\n >>插入职工信息:\n");
printf(">>>请输入插入位置:");scanf("%d",&i);
if ( i < 0 || i > L.length + 1){
printf("索引错误!\n");
Printf_();
}else{
Input(x);
int k = Locate(L,x.num);
if( k == 0 ){
for (int j = L.length ; j >= i ; j--)
L.data[ j ] = L.data[ j - 1];
InsElem(L,x,i);
printf("插入成功!\n");
printf("\n >>职工表变为:\n\n");
DispList(L);
}else{
printf("此职工号已存在,不能插入该信息!\n");
}
Printf_();
}
}
}
↑↑↑这个是,具有原表的基础上再插入职工数据的算法,和创建职工表的算法类似——就是上方Create()函数。先清屏,保持控制台美观,然后输出总表,看看想要把数据插到哪个位置。
//7.1封装某一功能的函数,用于函数 7 的使用
void Printf_7(SqList L,int i){
printf("修改成功!\n");
printf("\n >>该职工信息修改后变为:\n");
printf("\n\t 职工号\t 姓名\t性别\t年龄\t 手机号\t职位\t月薪\n");
printf("\t%s\t%s\t %s\t %d\t%s\t%s\t%d\n\n",L.data[i].num,L.data[i].name,L.data[i].sex,L.data[i].age,L.data[i].phonenum,L.data[i].position,L.data[i].money);
Printf_();
}
//7.修改信息(表信息被修改,所以要加上 & )
int Modification(SqList &L){
if ( L.length == 0 ){
printf("\n >>请先创建职工信息表!\n\n");
Printf_();
}else{
system("cls");
DispList(L);//列出职工表,方便查看需要修改的数据
int i = 0;//定义一个全局变量,用来保存符合条件的职工数据的存储下标
char number[11];//存储输入的职工号
printf("\n >>需要修改信息的职工的职工号为:");scanf("%s",number);
while ( i < L.length && strcmp(L.data[i].num,number) != 0 )
i++;//获得数据下标
if ( i < L.length ){
system("cls"); //找到则进行修改
printf("\n\t 职工号\t 姓名\t性别\t年龄\t 手机号\t职位\t月薪\n");//单独输出,方便查看要修改的内容
printf("\t%s\t%s\t %s\t %d\t%s\t%s\t%d\n\n",L.data[i].num,L.data[i].name,L.data[i].sex,L.data[i].age,L.data[i].phonenum,L.data[i].position,L.data[i].money);
printf("\n\tXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\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======= 7.修 改 月 薪 ==========\n");
printf("\t======= 8.退 出 本 菜 单 =======\n");
printf("\tXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
while (1){
int k;
printf(" >>请输入指令!\n");
char order = getch();
switch (order){
case '1':
char number[11];//存入输入的职工号,下面同理
printf("请输入新的职工号:");scanf("%s",number);
k = Locate(L,number);
if ( k != 0 && strcmp(L.data[i].num,number) != 0 ){//若输入的职工号,信息表中存在且不和要修改的职工号相等,则报错
printf("\n >>该职工号已存在,修改失败!\n\n");
system("pause");
return Modification(L);//返回该菜单栏下,重新要修改数据,下同
}else{
strcpy(L.data[i].num,number);//strcpy(a,b)函数,b复制给a,下面同理
Printf_7(L,i);
}
return 0; //修改完毕,返回首页主菜单,下同
break;
case '2':
char name[10];
printf("请输入新的姓名:");scanf("%s",name);
strcpy(L.data[i].name,name);
Printf_7(L,i);
return 0;
break;
case '3':
char sex[2];
printf("请输入新的性别:");scanf("%s",sex);
strcpy(L.data[i].sex,sex);
Printf_7(L,i);
return 0;
break;
case '4':
int age;
printf("请输入新的年龄:");scanf("%d",&age);
L.data[i].age = age;
Printf_7(L,i);
return 0;
break;
case '5':
char phonenum[12];
printf("请输入新的手机号:");scanf("%s",phonenum);
strcpy(L.data[i].phonenum,phonenum);
Printf_7(L,i);
return 0;
break;
case '6':
char position[5];
printf("请输入新的职位:");scanf("%s",position);
strcpy(L.data[i].position,position);
Printf_7(L,i);
return 0;
break;
case '7':
int money;
printf("请输入新的月薪:");scanf("%d",&money);
L.data[i].money = money;
Printf_7(L,i);
return 0;
break;
case '8':
system("cls");
return 0;
default:
Error();
break;
}
}
}else{
printf("\n >>未找到职工号为%s的职工\n\n",number);
system("pause");
return Modification(L);
}
}
}
↑↑↑这个是修改职工信息的函数,可以修改职工的任意信息。修改信息的操作都类似,先定义一个参数接收,然后再找到修改的值,覆盖即可。字符串运用到了strcpy(a,b)函数,将右边的字符串复制给左边。整型数据的修改,重新赋值即可。
注意:因为是修改数据,所以表中的数据发生了改变,所以函数的参数L要带&,我刚开始写的时候,忘记加&了,导致一直不成功,花了许多时间,想了各种操作。最后是这些细节问题,我的水平还有待提高。(┬_┬)↘
//8.系统说明
int Help(){
system("cls");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^欢迎使用职工信息管理系^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^下面是该系统的功能介绍和一些注意事项^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n");
printf("========================================================================================================================\n");
printf("\n >>0:退出菜单\n\n");
printf("--------------------------------------------------------功能介绍--------------------------------------------------------\n\n");
printf(" >>1.创建职工信息表\n\n");
printf(" >>>本系统可以创建职工信息表,职工信息包括:职工号,姓名,性别,年龄,手机号,职位,月薪。\n\n");
printf(" >>>如果职工表存在,再次创建系统会提示是否重新建立职工表,若重新建立则会覆盖原表,请慎重操作!\n\n");
printf(" >>>此系统录入的信息,默认职工号为10位阿拉伯数字,姓名为2~3位汉字,性别为1位汉字,年龄2位阿拉伯数字,手机号为11位数字,职位为2位汉字,月薪位4~5位阿拉伯数字。若不按规则输入,输出数据时可能会错位。作者水平有限,不能解决此问题,十分抱歉。\n\n");
printf(" >>>录入数据时,一定要要依次录完为止。例如录入5名职工信息,一定要输入5次,不可中途退出。而且录入数据时,识别不出非法字符,若输错,只能删除该信息,重新输入或进行修改。若有不便,请包涵。\n\n");
printf(" >>>其他的一些信息例如出生年月,家庭住址等,可以加入此信息,但系统不是很专业,暂不录入此信息。因此给您带来不便,还请多多包涵。\n\n");
printf("------------------------------------------------------------------------------------------------------------------------\n\n");
printf(" >>2.查找职工信息\n\n");
printf(" >>>此功能可以进行职工号查找,姓名查找,性别查找,年龄查找,手机号查找,职位查找,月薪查找。\n\n");
printf("------------------------------------------------------------------------------------------------------------------------\n\n");
printf(" >>3.删除信息\n\n");
printf(" >>>本系统给用户提供删除数据的功能\n\n");
printf(" >>>删除数据只能按数据索引删除,不能指定某一信息进行删除。比如:无法指定删除姓名为'张三'的数据\n\n");
printf(" >>>一旦输入删除命令,若存在信息表,则必须选择删除的位置,若反悔,可输入超过信息表索引的值(进入该功能时,会显示完整的信息表),以此退出该功能。\n\n");
printf(" >>>数据一旦删除,将无法修复,请慎重使用该功能\n\n");
printf("------------------------------------------------------------------------------------------------------------------------\n\n");
printf(" >>4.获取职工人数\n\n");
printf(" >>>本系统给用户提供获取职工人数的功能\n\n");
printf("------------------------------------------------------------------------------------------------------------------------\n\n");
printf(" >>5.输出职工表\n\n");
printf(" >>>本系统给用户提供获取职工信息表的功能\n\n");
printf(" >>>若不安规则输入(规则详见上方功能1的第三项),输出信息表时,数据会错位!\n\n");
printf("------------------------------------------------------------------------------------------------------------------------\n\n");
printf(" >>6.插入数据\n\n");
printf(" >>>本系统给用户提供插入职工信息的功能\n\n");
printf(" >>>一旦输入插入命令,若存在信息表,则必须选择插入的位置,若反悔,可输入超过信息表索引的值(进入该功能时,会显示完整的信息表),以此退出该功能。\n\n");
printf("------------------------------------------------------------------------------------------------------------------------\n\n");
printf(" >>7.修改信息\n\n");
printf(" >>>本系统给用户提供修改职工信息的功能\n\n");
printf(" >>>一旦输入修改指令,若存在信息表,则必须选择需要修改数据的职工的职工号,选择后,若反悔,可按8退出该功能。\n\n");
printf("=======================================================================================================================\n");
while(1){
char order = getch();
switch(order){
case '0':
system("cls");
return 0;
break;
}
}
}
↑↑↑这个是系统说明,类似于每个产品的使用说明书。
接下来就是主函数部分了,主函数尽量简洁,不要有多余的代码,不然调试的时候非常的累。尽量把操作写成函数的形式,主函数和操作函数尽量分不同的文件写,然后把操作函数导入主函数的文件里来运行。
#include "SqList.cpp"
int main(){
ElemType x;SqList L;InitList(L);//三件套
int cycle = 1;
while(cycle == 1){
int i;//函数执行参数
printf("======================================================================\n");
printf("*******************使用该系统前,请先仔细阅读系统说明******************\n");
printf("**********************┍ -----------------------┑ *********************\n");
printf("********************** 欢迎使用职工信息管理系统 *********************\n");
printf("**********************┕------------------------┙ *********************\n");
printf("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx菜单xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n");
printf("======================================================================\n");
printf("....... 1.创建新表 ..... 2.查找信息 .......\n");
printf("....... 3.删除信息 ..... 4.获取人数 .......\n");
printf("....... 5.输出总表 ..... 6.插入信息 .......\n");
printf("....... 7.修改信息 ..... 8.系统说明 .......\n");
printf("请输入指令!\n");
char order = getch();//接收一个指令,控制台不显示该指令
switch(order){
case '1':
Create(L); //建表
break;
case '2':
Search(L); //查询
break;
case '3':
DelElem(L,i); //删数据
break;
case '4':
GetLength(L);//获得职工人数
break;
case '5':
DispList(L); //输出职工表
Printf_();
break;
case '6':
HalfInsElem(L,x,i); //插入数据
break;
case '7':
Modification(L);//修改信息
break;
case '8':
Help();//系统说明文档
break;
case '0':
system("cls");
printf("\n >>删库跑路!<<\n");//秘密指令,欸嘿
cycle = 0;
break;
default:
Error();//指令报错
break;
}
}
return 1;
}
↑↑↑以上就是主函数部分,因为我把操作函数都放在了“SqList.cpp"文件里面,所以使用主函数时要先导入该文件。这里的菜单栏我参考了CSDN上一位大佬的写法,觉得不错就拿来改了改,不然菜单栏就会很难看,什么框架也没有。
这就是职工信息管理系统的源码了。第一次写博客,也是第一次写职工管理系统,可能有很多错误的地方,代码可能写的不是特别好,反正没人看(bushi)。如果有错误的地方,还望读者指出,也可以提些意见。