职工信息管理系统程序设计Word格式文档下载.docx
《职工信息管理系统程序设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《职工信息管理系统程序设计Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
--算法
按职工号查询
按学历查询
按电话查询
职工信息删除、添加功能
【i】address、电话em【i】telephone)。
通过for循环输入所有职工信息。
用printf语句提示需要输入的内容,接着用scanf语句输入相应内容。
输入完毕后套用保存函数save(N)将所输入的信息写入指定文件。
=0
!
=0
保存函数:
void
save(int
m)
定义文件指针fp,用fopen"
只写"
打开指定在D盘的“d:
//bbb.txt”文本文件。
首先用if语句判断文件是否打开成功,若fopen返回值不为0,则可继续下面操作。
用for循环通过fprintf语句将结构数组em中的内容写入保存在D盘的文本文件里面。
形参m指需要写入文件的职工人数。
最后关闭文件。
!
导出函数:
load(int
b)
首先判断fopen"
只读"
打开“d:
//bbb.txt”是否成功,若其返回值不为零,继续下面操作。
用for循环通过fscanf语句将文件中的职工信息取出放到em结构数组里面。
形参b指需要导出的职工人数。
图同上。
4功能模块函数设计和调试
4.1功能模块函数设计
在整个程序的编译过程中,在调试的时候出现了好多的错误和警告,经过认真的分析和修改都可以解决,但是其中遇到最大的问题是所有程序代码编完放在一起后,虽然能够成功运行,但是还是出现了一些小问题,就是在调用随机分配函数时职工的工号不随机分配,每次到了自动分配工号的时候都会跳过那一步就直接进行下一环节输入了。
这使我百思不得其解,后来我在网上查询了好多资料后终于明白了,原来在使用随机分配函数时首先要调用随机分配函数所在的函数库,这样才能够正常使用。
使用时如果职工人数发生变化,会导致文件后部出现乱码的现象。
若要使每次运行都正常,必须在人数改变后退出程序,修改宏定义N的值。
这样很不方便,不能够连续运行。
为解决这一大问题,最后我想到了定义一个全局变量,用来追踪链接最新的人数。
特别是删除和添加这两个会导致人数变化的函数中,全局变量p起了很大作用。
经过一边修改一边调试,最终可以成功的用p串联整个函数,在连续运行时,总能根据最新的人数调用各个函数。
另外在串联所有函数时,调试提示出错:
有以下几个函数:
“search;
srand;
display;
basic;
types”解决:
在函数名前加void指明类型。
整个程序代码是分块书写的,每个函数都可以独立运行。
只有输入函数查询菜单函数写得很顺利,一次性就能够成功运行,其他函数在调试过程中或多或少都出现了问题。
保存函数save()在调试和链接的时候都没有出现错误提示,但在运行的时候出现了问题。
写入指定位置的文件,打开后总会有乱码。
与c语言课本上的例题对照后发现,在存储文件时一定要指定文件的存储类型。
这样才能够正确的进行存储,不会出现乱码的现象。
导出函数load()遇到两个问题。
1是为方便直接将保存函数复制过来进行修改时,忘了修改文件的打开方式,不能运行。
经过多次检查后终于发现了,解决:
将只写改为只读就ok了。
2是用fscanf语句时,漏写地址符。
调试和链接都没问题,但点击运行后,总出现一个提示出错的蓝色小窗口。
经过老师的提示发现了错误的所在。
解决方法:
在em[i].name等之前加上取地址符就可以解决。
在进行职工信息录入的时候一定要注意中文和英文之间的切换,不然的话会出现无法正确的输入和跳转现象。
4.2程序调试
4.2.1原始数据
{intnum;
charname[10];
charsex;
intage;
charxueli[30];
intwage;
charaddr[30];
longinttel;
}em[100];
/*定义一个结构体*/
voidmenu();
voidinput();
voidsave(int);
voiddisplay();
voiddel();
voidadd();
voidsearch();
voidsearch_num();
voidsearch_xueli();
voidsearch_tel();
voidmodify();
/*定义各函数*/
voidmenu()/*菜单函数*/
{printf("
☆☆☆C语言程序设计☆☆☆\n"
);
printf("
\n"
∮机设1401班张凯凯∮\n"
**********职工信息管理**********\n"
1.录入职工信息"
2.浏览职工信息\n"
3.查询职工信息"
4.删除职工信息\n"
5.添加职工信息"
6.修改职工信息\n"
7.退出\n"
**********谢谢使用**********\n"
}voidmain()
{menu();
/*调用菜单函数*/
intn,flag;
chara;
do
{printf("
请选择你需要操作的步骤(1--7):
scanf("
%d"
&
n);
if(n>
=1&
&
n<
=7)
{flag=1;
break;
}
else
{flag=0;
您输入有误,请重新选择!
"
}
}while(flag==0);
while(flag==1)
{switch(n)
{case1:
printf("
◆◆◆输入职工信息◆◆◆\n"
input();
break;
case2:
◆◆◆浏览职工信息◆◆◆\n"
display();
case3:
◆◆◆按职工号查询职工信息◆◆◆\n"
search();
case4:
◆◆◆删除职工信息◆◆◆\n"
del();
case5:
◆◆◆添加职工信息◆◆◆\n"
add();
case6:
◆◆◆修改职工信息◆◆◆\n"
modify();
case7:
exit(0);
default:
getchar();
是否继续进行(yorn):
%c"
a);
if(a=='
y'
)
{
flag=1;
system("
cls"
/*清屏*/
menu();
请再次选择你需要操作的步骤(1--6):
}else
exit(0);
voidinput()/*录入函数*/
{
inti,m;
请输入需要创建信息的职工人数(1--100):
m);
for(i=0;
i<
m;
i++)
职工号:
"
srand((int)time(0));
em[i].num=rand()%10000+20140000;
if(em[i].num!
=em[i-1].num)
printf("
%8d"
em[i].num);
请输入姓名:
%s"
em[i].name);
请输入性别(f--女m--男):
em[i].sex);
请输入年龄:
em[i].age);
请输入学历:
em[i].xueli);
请输入工资:
em[i].wage);
请输入住址:
em[i].addr);
请输入电话:
%ld"
em[i].tel);
\n创建完毕!
save(m);
voidsave(intm)/*保存文件函数*/
inti;
FILE*fp;
if((fp=fopen("
employee_list"
"
wb"
))==NULL)/*创建文件并判断是否能打开*/
printf("
cannotopenfile\n"
i++)/*将内存中职工的信息输出到磁盘文件中去*/
if(fwrite(&
em[i],sizeof(structemployee),1,fp)!
=1)
filewriteerror\n"
fclose(fp);
intload()/*导入函数*/
inti=0;
if((fp=fopen("
rb"
))==NULL)
cann