1、电子科技大学成都学院计算机系 实践专周设计报告 课 程 名 称:__ 程序设计实践 设 计 题 目:___职工管理系统 _ 指导 教师 组:___方智 陈科 _ 组长学号姓名:______________ _ 组员学号姓名:______________ _ 组员学号姓名:______________ _ 组员学号姓名:______________ _ 计算机系制 2014年2月 目 录 目 录 第1章 引言 1 1.1 设计目的 1
2、 1.2 功能要求 1 1.2.1 基本要求 1 1.2.2 创新要求 2 1.3 信息描述 2 1.4 功能描述 2 第2章 总体设计 4 2.1 程序功能结构图 4 2.2 系统功能设计 4 第3章 详细设计 6 3.1 存储结构设计 6 3.2 模块功能及算法设计 7 3.2.1 加载所有联系人信息LoadData() 7 3.2.2 保存联系人Save() 8 3.2.3 录入联系人信息Input () 8 3.2.4 浏览所有联系人信息:Display() 9 3.2.5 显示某一个联系人的所有信息:DisplayDetails() 10 3.2.6
3、 查找联系人:Search( ) 11 3.2.7 修改联系人:Modify( ) 11 3.2.8 删除联系人:Delete( ) 12 第4章 系统实现 14 4.1 系统主界面 14 4.2 录入联系人信息 18 4.3 浏览所有联系人信息 21 4.4 查找联系人 22 4.5 修改联系人 25 4.6 删除联系人 28 第5章 总结 31 5.1 系统存在的问题及解决方案 31 5.2 收获及心得体会 31 参考文献 32 致谢 34 附录 35 附录一:程序设计清单 35 37 第1章 引言 第1章 引言 1.1 问题分析 职工管理系
4、统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以职工管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来各个公司基本上都是靠传统的人工方式来管理职工信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于信息的查找、更新和维护都带来了不少的困难。 职工管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以职工管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来各个公司基本上都是靠传统的人工方式来管理职工信息,这种管理方式存在着许多缺点,如
5、效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于信息的查找、更新和维护都带来了不少的困难。 1.2 设计目标 1.2.1 基本功能 设计一个职工系统管理软件。该系统将完成录入职工信息、查询职工信息和删除职工信息、添加职工信息,本系统的功能模块图如图1-1所示。 职工信息管理 录入信息 查询信息 修改信息 搜索信息 添加信息 职工信息 职工总数 工资查询 学历查询 删除信息 返回 图1-1 职工系统管理软件功能模块图 1.2.2 扩展功能 姓名检索信息,点击此按钮则可以显示出当前那一条或几条员工信息,用名
6、字来查看员工信息。综上本系统可以对员工信息实现科学自动的管理,其中包括显示职工基本信息,并实现信息的添加、删除、显示、及检索。 1.3 信息描述 本系统中涉及的基本数据对象有员工人数、职工姓名、职工性别和职工电话。下面给出各对象所包含的部分属性。如表1-2所示。 对象名称 包含属性 员工人数 总共的员工数 职工姓名 每个职工的姓名 职工电话 每个职工的手机号 职工工资 不同职工的工资分布 表1-2信息描述表 1.4 功能描述 经过实际考察与分析,典型的职工信息管理系统主要应具有以下功能: 1.创建职工信息功能:包括职工姓名、年龄、工龄、性别、婚姻状况、是否
7、在职的录入功能。 2.查询功能:按姓名、工龄、级别进行查询职工基本信息。 3. 修改功能:按姓名、工龄、级别进行职工个人信息的修改。 4.添加功能:成功添加新进员工的个人信息。 5.删除功能:按姓名、工龄、级别将离职员工的个人信息删除 调整工资功能:按员工级别进行工资调整。 6.保存文件功能:将职工信息保存。 7.读取文件功能:读取职工信息。 8.输出功能:将更新的职工信息打印。 9.退出功能:退出程序 1.5 设计思路 (1)具有高度的容错机制,不会因小的失误造成死循环。 (2)简洁 (3)错误报警机制可以提醒用户进行正确的操作。
8、 (4)可选择性,在进行修改、删除等操作时可按不同方式进行,方便用户操作。 (5)功能齐全,充分考虑到用户的实际需求。 (6)操作简单。因为使用者多为非计算机专业人员,所以该系统要求设计的操作方便。易于维护。一个软件的好坏,关键在于产品便于维护。 2.开发语言的选择 鉴于电脑在人群中的广泛普及和工厂对职工信息管理的需求,以及用记事本记录职工信息的不方便、不安全等因素。我们组决定运用学到的c语言的知识来编写一个用于方便职工信息管理的系统 第2章 总体设计 第2章 总体设计 2.1 程序功能结构图 程序功能结构管理图如下:. 职工信息管理 创建职工信息 修
9、改职工信息 添加职工信息 删除职工信息 退 出 姓名 性别 年龄 电话 工资 图2-1 程序功能结构图 2.2 程序的功能分析 1.输入功能: 在本功能中,是在进入管理系统后进行的对职工进行的输入操作功能, 其中,包括要输入的职工人数,职工的工号,姓名,性别,年龄,学历,工资,住址,电话。 2.浏览功能: 本功能将所有职工及其信息全部输出,包括职工人数,职工的工号,姓名,年龄,学历,工资,住址,电话。输出完毕,按任意键返回管理系统。 3.查找功能: 进行该项功能时,只需输入职工的姓名,系统就会按姓名差找到该职工,并输出该职工的所有
10、信息。按姓名查找,能快速的找到你要找到的信息,大大的 省了时间。 4.删除功能: 在此功能模块中用户可先根据输入姓名查找到职工,同时可查看要删除的职工的信息,然后由用户进行删除。若不存在要删除的信息提示用户退出并返回主界面 5.修改功能: 本功能中我们首先提示用户通过输入姓名查找到所要修改的职工信息并全显示出来,修改时我们设计可以让用户单独修改某一项或者修改多项,通过选数字 6.添加功能: 在本功能中用户可以在容量范围内进行添加职工信息,超出容量给予提示并返回主界面,添加时通过输入姓名进行各项信息的添加。添加完成后根据提示继续添加或返回主界面。 .7.退出系统: 在主界面中选择
11、退出系统,即可成功退出。
2.3 系统体系结构
职工信息管理系统的核心的是对职工信息进行增加,删除,查找,修改和统计,是以信息为中心的体系结构,依靠信息联通各个功能模块。
信息
信息
修改
添加
删除
查找
创建
图2-2 系统体系结构图
第3章 详细设计
第3章 详细设计
3.1 存储结构设计
(1) 在void main函数中进行创建存储文本,代码如下:
#include
12、
struct employee
int num;
char name[10];
char sex;
int age;
char xueli[30];
int wage;
char addr[30];
long int tel;
em[100]; /*定义一个结构体*/
(2)调用void input()函数进行数据存储,代码如下
void input() /*录入函数*/
{int i,m;
printf("请输入需要创建信息的职工人数(1--100):\n");
scanf("%d",&m);
for (i=0;i 13、 ");
srand((int)time(0));
em[i].num=rand()%10000+20000000;
if(em[i].num!=em[i-1].num)
printf("%8d ",em[i].num);
printf("\n");
printf("请输入姓名: ");
scanf("%s",em[i].name);
getchar();
printf("请输入性别(f--女 m--男): ");
scanf("%c",&em[i].sex);
printf("请输入年龄: ");
scanf("%d",&em[i].age);
printf("请输 14、入学历: ");
scanf("%s",em[i].xueli);
printf("请输入工资: ");
scanf("%d",&em[i].wage);
printf("请输入住址: ");
scanf("%s",em[i].addr);
printf("请输入电话: ");
scanf("%d",&em[i].tel);
printf("\n");
}printf("\n创建完毕!\n");
save(m);}:
3.2 模块功能及算法设计
3.2.1 模块分类设计
(1) 主函数模块main()
(2) 添加函数模块:
1.录入职工信息void input( 15、) /*录入函数*/
2.添加职工信息void save(int m) /*保存文件函数*
(3)删除函数模块:
1.删除职工信息void del() /*删除函数*/
2.修改函数信息void modify() /*修改函数*/
(4)查询函数模块:
查询职工信息void search_num()
3.2.2 三大主要模块设计
职工信息管理模块包含:
添加职工模块void save(int m) 、删除职工模块void del()、修改职工模块void modify()。算法设计源代码如下:
1.添加职工流程图如下:
图3-1 16、 添加职工流程图
void add()/*添加函数*/
{FILE*fp;
int n;
int count=0;
int i;
int m=load();
printf("\n 原来的职工信息:\n");
display(); /* 调用浏览函数*/
printf("\n");
fp=fopen("emploee_list","a");
printf("请输入想增加的职工数:\n");
scanf("%d",&n);
for (i=m;i<(m+n);i++)
{printf("\n 请输入新增加职工的信息:\n");
printf("请输入职工号: ");
17、srand((int)time(0));
em[i].num=rand()%10000+20000000;
if(em[i].num!=em[i-1].num)
printf("%8d ",em[i].num);
printf("\n");
printf("请输入姓名: ");
scanf("%s",em[i].name);
getchar();
printf("请输入性别(f--女 m--男): ");
scanf("%c",&em[i].sex);
printf("请输入年龄: ");
scanf("%d",&em[i].age);
printf("请输入学历: " 18、);
scanf("%s",em[i].xueli);
printf("请输入工资: ");
scanf("%d",&em[i].wage);
printf("请输入住址: ");
scanf("%s",em[i].addr);
printf("请输入电话: ");
scanf("%d",&em[i].tel);
printf("\n");
count=count+1;
printf("已增加的人数:\n");
printf("%d\n",count);
}printf("\n添加完毕!\n");
m=m+count;
printf("\n浏览增加后的所有职工信息: 19、\n");
2.删除职工流程图如下:
开始
输入要删除的职工号
职工号是否存在
删除职工信息
结束
系统不更改
图3-2删除职工流程图
void del() /*删除函数*/
{
int m=load();
int i,j,n,t,flag;
char name[20];
printf("\n 原来的职工信息:\n");
display(); /* 调用浏览函数*/
printf("\n");
printf("请输入要删除的职工的姓名:\n");
scanf("%s",name);
for(flag=1,i= 20、0;flag&&i 21、请按1,不删除请按0\n");
scanf("%d",&n);
if(n==1) /*如果删除,则其他的信息都往上移一行*/
{for(j=i;j 22、em[j+1].tel;
}flag=0;if(!flag)
m=m-1;
else
printf("\n对不起,查无此人!\n");
printf("\n 浏览删除后的所有职工信息:\n");
save(m); /*调用保存函数*/
display(); /*调用浏览函数*/
printf("\n继续删除请按1,不再删除请按0\n");
scanf("%d",&t);
switch(t)
{
case 1:del();break;
case 0:break;
default :break;
3.查询职工模块图如下:
23、
开始
输入要查找的姓名
是否在库
结束
提示无此人
图3-3查询职工模块图
void search()/*查询函数*/
{
int t,flag;
do
{
printf("\n按职工号查询-1 ; 按学历查询-2 ; 按电话号码查询-3;进入主函数-4\n");
scanf("%d",&t);
if(t>=1&&t<=4)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
}
while(flag==0);
while(flag==1)
{
switch(t) 24、
{
case 1:printf("按职工号查询\n");search_num();break;
case 2:printf("按学历查询\n");search_xueli();break;
case 3:printf("按电话号码查询\n");search_tel();break;
case 4:main();break;
default:break;
}
} void display() /*浏览函数*/
{
int i;
int m=load();
printf("\n 职工号 \t姓名\t性别\t年龄\t学历\t工资\t住址\t电话 \n");
for( 25、i=0;i 26、>
#include 27、
void add();
void search();
void search_num();
void search_xueli();
void search_tel();
void modify(); /*定义各函数*/
void menu() /*菜单函数*/
{printf(" ☆☆☆计算机科学与技术专业☆☆☆\n");
printf("\n");
printf("\n");
printf(" ******************职工信息管理****************\n");
printf(" 1.录入职工信息");
printf(" 2.浏览职工信息 28、\n");
printf(" 3.查询职工信息");
printf(" 4.删除职工信息\n");
printf(" 5.添加职工信息");
printf(" 6.修改职工信息\n");
printf(" 7.退出\n");
printf(" ********************谢谢使用******************\n");
printf("\n");
printf("\n");
}void main()
{int n,flag;
char a;
menu(); /*调用菜单函数*/
do{
printf("请选择你需要操作的步骤(1--7):\n"); 29、
scanf("%d",&n);
if(n>=1&&n<=7)
{flag=1;
break;
}else
{flag=0;
printf("您输入有误,请重新选择!");
}}while(flag==0);
while(flag==1)
{switch(n)
{case 1:printf(" ◆◆◆输入职工信息◆◆◆\n");printf("\n");input();break;
case 2:printf(" ◆◆◆浏览职工信息◆◆◆\n");printf("\n");display();break;
case 3:printf(" ◆◆◆按职工号查询职工信息◆◆ 30、◆\n");printf("\n");search();break;
case 4:printf(" ◆◆◆删除职工信息◆◆◆\n");printf("\n");del();break;
case 5:printf(" ◆◆◆添加职工信息◆◆◆\n");printf("\n");add();break;
case 6:printf(" ◆◆◆修改职工信息◆◆◆\n");printf("\n");modify();break;
case 7:exit(0);break;
default :break;
}getchar();
printf("\n");
printf("是否继续进 31、行(y or n):\n");
scanf("%c",&a);
if(a=='y')
{flag=1;
system("cls"); /*清屏*/
menu(); /*调用菜单函数*/
printf("请再次选择你需要操作的步骤(1--6):\n");
scanf("%d",&n);
printf("\n");
}else
exit(0);}}
4.2 录入职工信息
录入职工信息运行效果如图4-2所示。
图4-2 录入职工信息运行效果
核心代码如下:
void input() /*录入函数*/
{nt i,m;
printf("请输入需要创建信息的职工人数 32、1--100):\n");
scanf("%d",&m);
for (i=0;i 33、i].sex);
printf("请输入年龄: ");
scanf("%d",&em[i].age);
printf("请输入学历: ");
scanf("%s",em[i].xueli);
printf("请输入工资: ");
scanf("%d",&em[i].wage);
printf("请输入住址: ");
scanf("%s",em[i].addr);
printf("请输入电话: ");
scanf("%d",&em[i].tel);
printf("\n");
}printf("\n创建完毕!\n");
save(m);
}void save(int 34、m) /*保存文件函数*/
{int i;
FILE*fp;
if ((fp=fopen("employee_list.txt","wb"))==NULL) /*创建文件并判断是否能打*/
{printf ("cannot open file\n");
exit(0);
}for (i=0;i 35、/
{FILE*fp;
int i=0;
if((fp=fopen("employee_list.txt","rb"))==NULL){
printf ("cannot open file\n");
exit(0);
}else
{do
{fread(&em[i],sizeof(struct employee),1,fp);
i++;}
while(feof(fp)==0);
}fclose(fp);
return(i-1);}
4.3 浏览职工信息
浏览职工信息运行效果如图4-3所示。
图4-3 浏览职工信息运行效果
核心代码如下:
int load() 36、/*导入函数*/
{
FILE*fp;
int i=0;
if((fp=fopen("employee_list.txt","rb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
else
{do
{fread(&em[i],sizeof(struct employee),1,fp);
i++;}
while(feof(fp)==0);
}fclose(fp);
return(i-1);
}void display() /*浏览函数*/
{nt i;
int m=load();
printf("\ 37、n 职工号 \t姓名\t性别\t年龄\t学历\t工资\t住址\t电话 \n");
for(i=0;i 38、/
{int t,flag;
do{printf("\n按职工号查询-1 ; 按学历查询-2 ; 按电话号码查询-3;进入主函数-4\n");
scanf("%d",&t);
if(t>=1&&t<=4)
{flag=1;
break;
}else
{flag=0;
printf("您输入有误,请重新选择!");
}}while(flag==0);
while(flag==1)
{switch(t){
case 1:printf("按职工号查询\n");search_num();break;
case 2:printf("按学历查询\n");search_xuel 39、i();break;
case 3:printf("按电话号码查询\n");search_tel();break;
case 4:main();break;
default:break;
}}}
void search_num(){
int num;
int i,t;
int m=load();
printf("请输入要查找的职工号(20001111---20009999):\n");
scanf("%d",&num);
for(i=0;i 40、n职工号 \t姓名\t性别\t年龄\t学历\t工资\t住址\t电话 \n");
printf("\n%d \t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",
em[i].num,em[i].name,em[i].sex,em[i].age
,em[i].xueli,em[i]
.wage,em[i].addr,em[i].tel);
break;
}if(i==m)
printf("\n对不起,查无此人\n");
printf("\n");
printf("返回查询函数请按1,继续查询职工号请按2\n");
scanf("%d",&t);
sw 41、itch(t){
case 1:search();break;
case 2: break;
default:break;}
void search_xueli(){har xueli[30];
int i,t;int m=load();
printf("请输入要查找的学历:\n");
scanf("%s",xueli);
for(i=0;i 42、
printf("\n%d \t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n"
,em[i].num,em[i].name,em[i].sex,em[i
].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
}if(i==m)
printf("\n对不起,查无此人\n");
printf("\n");
printf("返回查询函数请按1,继续查询学历请按2\n");
scanf("%d",&t);
switch(t){
case 1:search();break;
case 2:break;defau 43、lt :break;
}}void search_tel(){
long int tel;
int i, t;
int m=load();
printf("请输入要查找的电话号码:\n");
scanf("%ld",&tel);
for(i=0;i 44、um,em[i].name,em[i].s
ex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
break;
}if(i==m)
printf("\n对不起,查无此人\n");
printf("\n");
printf("返回查询函数请按1,继续查询电话号码请按2\n");
scanf("%d",&t);
switch(t){
case 1:search();break;case 2:break;
default :break;}
}}
4.5 删除职工信息
删除职工信息运行效果如图4-5所示。
图4 45、5删除职工信息运行效果
核心代码如下:
void del() /*删除函数*/
{
int m=load();
int i,j,n,t,flag;
char name[20];
printf("\n 原来的职工信息:\n");
display(); /* 调用浏览函数*/
printf("\n");
printf("请输入要删除的职工的姓名:\n");
scanf("%s",name);
for(flag=1,i=0;flag&&i 46、
printf("\n职工号 \t姓名\t性别\t年龄\t学历\t工资\t住址\t电话 \n");
printf("\n%d \t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
printf("\n确实要删除此人信息请按1,不删除请按0\n");
scanf("%d",&n);
if(n==1) /*如果删除,则其他的信息都往上移一行*/
{for(j=i;j 47、strcpy(em[j].name,em[j+1].name);
em[j].num=em[j+1].num;
em[j].sex=em[j+1].sex;
em[j].age=em[j+1].age;
strcpy(em[j].xueli,em[j+1].xueli);
em[j].wage=em[j+1].wage;
strcpy(em[j].addr,em[j+1].addr);
em[j].tel=em[j+1].tel;
}flag=0;
}}}
if(!flag)
m=m-1;
else
printf("\n对不起,查无此人!\n");
printf(" 48、\n 浏览删除后的所有职工信息:\n");
save(m); /*调用保存函数*/
display(); /*调用浏览函数*/
printf("\n继续删除请按1,不再删除请按0\n");
scanf("%d",&t);
switch(t)
{case 1:del();break;
case 0:break;
default :break;
}}
4.6 添加职工信息
添加职工信息运行效果如图4-6所示。
图4-6删除职工信息运行效果
核心代码如下:
void add()/*添加函数*/
{FILE*fp;
int n;
int count=0;
int i 49、
int m=load();
printf("\n 原来的职工信息:\n");
display(); /* 调用浏览函数*/
printf("\n");
fp=fopen("emploee_list","a");
printf("请输入想增加的职工数:\n");
scanf("%d",&n);
for (i=m;i<(m+n);i++)
{printf("\n 请输入新增加职工的信息:\n");
printf("请输入职工号: ");
srand((int)time(0));
em[i].num=rand()%10000+20000000;
if(em[i].num 50、em[i-1].num)
printf("%8d ",em[i].num);
printf("\n");
printf("请输入姓名: ");
scanf("%s",em[i].name);
getchar();
printf("请输入性别(f--女 m--男): ");
scanf("%c",&em[i].sex);
printf("请输入年龄: ");
scanf("%d",&em[i].age);
printf("请输入学历: ");
scanf("%s",em[i].xueli);
printf("请输入工资: ");
scanf("%d",&em[i].