职工信息管理系统 C语言实习报告.docx

上传人:b****5 文档编号:6866587 上传时间:2023-01-11 格式:DOCX 页数:26 大小:403.53KB
下载 相关 举报
职工信息管理系统 C语言实习报告.docx_第1页
第1页 / 共26页
职工信息管理系统 C语言实习报告.docx_第2页
第2页 / 共26页
职工信息管理系统 C语言实习报告.docx_第3页
第3页 / 共26页
职工信息管理系统 C语言实习报告.docx_第4页
第4页 / 共26页
职工信息管理系统 C语言实习报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

职工信息管理系统 C语言实习报告.docx

《职工信息管理系统 C语言实习报告.docx》由会员分享,可在线阅读,更多相关《职工信息管理系统 C语言实习报告.docx(26页珍藏版)》请在冰豆网上搜索。

职工信息管理系统 C语言实习报告.docx

职工信息管理系统C语言实习报告

 

C语言课程实习报告

 

所在院系:

__经济管理学院___

班级学号:

__08108120081001708_

姓名:

__张梦莹______

程序已存档:

指导老师:

__赵曼____

评分:

____________

 

二零一零年一月十五日

 

目录

1.1题目分析

1.2需求分析

1.3总体设计

1.4详细设计

1.1.4主函数

1.4.2各功能模块设计

(1)输入模块

(2)浏览模块

(3)查找模块(包括修改)

(4)插入模块

3公共函数

(1)保存函数

(2)加载函数

(3)职工号输入函数

(4)输入整一个记录函数

(5)显示一个记录的函数

(6)结束选择浏览或返回函数

(7)修改整条数据记录函数

1.5程序测试

1.5.1数据源

1.5.2编译、连接和运行

1.5.3结果

1.6结束语--实习心得

职工信息管理系统

摘要:

本论文设计的程序是《C语言课程设计指导书》第11题--职工信息管理系统。

这个管理系统能对职工的信息(包括职工号、姓名、性别、年龄、学历、工资、住址、电话等)进行有效地信息录入、浏览、查询、插入、删除等操作,通过操作可以给各方面的用户带来很大的便利。

1.1题目分析

题目要求

职工信息包括职工号,姓名,性别,年龄,学历,工资,住址,电话等(职工号不重复)。

试设计一职工信息管理系统,使之能提供以下功能:

●系统以菜单方式工作。

●职工信息录入功能(职工信息用文件保存)。

●职工信息浏览功能。

●职工信息查询功能,查询方式可按学历查询或按职工号查询。

●职工信息删除,修改功能(可选项)。

[提示]

建立职工信息结构体,结构体成员包括职工号、姓名、性别、年龄、学历、工资、住址、电话。

1.2需求分析

根据题目要求,要求对职工信息进行输入、输出等操作;在程序中需要浏览职工的信息,应提供显示、查找、浏览、插入、修改等操作;另外还应提供键盘式选择菜单实现功能选择。

1.3总体设计

 

图1.3系统功能模块图

 

1.4详细设计

1.4.1主函数

主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。

其中各功能模块用菜单方式选择。

[流程图]:

 

显示各功能选项

图1.4.1主函数流程图

[程序]:

/*****************主函数**********************/

main()

{menu();

}

/*****************menu函数********************/

voidmenu()

{intn,w1;/*变量n保存选择菜单数字,w1判断输入的数字是否在功能菜单对应数字范围*/

do

{

puts("\t\t*****************职工信息管理系统****************\n\n");

puts("\t\t\t\t1.Enternewdata");

puts("\t\t\t\t2.Browseall");

puts("\t\t\t\t3.Search");

puts("\t\t\t\t4.Add");

puts("\t\t\t\t5.Exit");

puts("\n\n\t\t***********************************\n");

printf("Choiceyournumber(1-5):

[]\b\b");

scanf("%d",&n);

if(n<1||n>5)/*对选择的数字作出判断,是否在菜单功能数字范围内*/

{w1=1;getchar();}

elsew1=0;

}while(w1==1);

switch(n)/*根据输入的数字,进入到相应的操作模块中*/

{case1:

enter();break;/*输入模块*/

case2:

browse();break;/*浏览模块*/

case3:

search();break;/*查找模块,其中包括按不同类别进行查找的多个子模块*/

case4:

add();break;/*插入模块*/

case5:

exit(0);/*退出*/

}

}

注:

menu函数能提供菜单方式选择功能,可以根据用户需要进入到所想要的操作模块中,此外把menu函数独立出来,可以方便随时对它进行调用,容易返回到系统界面。

用结构体来存放职工信息:

/********************结构体*******************/

structworker

{

charnumber[11];

charname[20];

charsex[20];

charadress[20];

charxueli[20];

chartelephone[20];

charage[20];

charsalary[20];

}wor[N];

/*wor[N]中每个数组元素对应一个职工*/

其中可以根据宏定义#defineN随时对N的值进行调整,扩大信息的储存量。

1.4.2各功能模块设计

(1)输入模块

[需求分析]对信息进行输入。

[流程图]:

 

图1输入模块流程图

 

[程序]:

/********************输入模块*******************/

voidenter()/*输入函数*/

{

inti,n;

printf("Howmanyworkers(0-%d):

",N-1);

scanf("%d",&n);/*输入记录的个数,赋值给n*/

printf("\nEnterdatanow\n\n");

for(i=0;i

{printf("\nInput%dthworkerrecord.\n",i+1);

input(i);/*调用单个输入函数*/

}

if(i!

=0)save(n);/*调用保存函数*/

printf_back();/*一个任务结束时让用户选择还是浏览还是返回*/

}

(2)浏览模块

[需求分析]该模块的功能是显示所有职工记录信息。

[流程图]

显示职工记录(10个一屏)

 

按任意键显示下一屏

 

按任意键返回主菜单

 

图2浏览模块流程图

[程序]:

/****************浏览(全部)模块***************/

browse()/*浏览(全部模块)*/

{

inti,j,n;

n=load();/*调用加载函数,并计算可以记录的个数*/

printf_face();/*调出显示数据结构项目函数*/

for(i=0;i

{

if((i!

=0)&&(i%10==0))/*判断i值能否整除10,每10行一屏显示*/

{

printf("\n\nPassanykeytocontinue...");

getchar();

puts("\n\n");

}

printf_one(i);/*调用显示一个记录的函数*/

}

printf("\tThereare%drecord.\n",n);/*提示用户储存信息数量*/

printf("\nPassanykeytoback...");

getchar();/*按任意键*/

menu();/*返回主菜单*/

}

(3)查找模块

[流程图]:

图3查找模块流程图

 

[程序]:

/***************查找模块***************/

search()/*查找模块*/

{

intc,w1;

do/*do-while循环语句用来判断用户的选择是否在程序规定之内*/

{

puts("\nsearchby=>\n\n1).number2}.xueli3).cancelandback");

printf("Whichyouneeded?

:

[]\b\b");

scanf("%d",&c);

if(c>3||c<1)/*对选择的数字作出判断*/

{

puts("\nchoiceerror!

pleaseagain!

");

getchar();}

}

while(c>3||c<1);

{

switch(c)/*switch语句提供按不同类别进行查找功能*/

{

case1:

search1();break;/*按职工号进行查找*/

case2:

search2();break;/*按学历进行查找*/

case3:

menu();break;/*返回主菜单*/

}

}

}

/***************按职工号查找模块***************/

[流程图]:

 

按职工号查找模块

用户作出选择,输入一整型数值

1,2,还是3

1继续查找

3返回主菜单

2修改

图4按职工号查找模块流程图

[程序]:

search1()

{

inti,n,k,w1=1,w2,w3,w4;

structworkers;/*定义结构体变量s,用以储存输入的number的值,便于进行比较*/

n=load();/*加载将要记录的个数*/

do/*该do-while循环语句判断是否继续执行该函数*/

{

do/*该do-while循环语句判断是否找到要查找的对象*/

{

k==1;

printf("\n\nEnternumberthatyouwanttosearch!

number:

");

scanf("%s",s.number);

printf_face();/*调出显示数据结构项目函数*/

for(i=0;i

同的职工号*/

if(strcmp(s.number,wor[i].number)==0)/*原数据信息中找到与输入职工号相

同的职工号*/

{k=i;

printf_one(k);break;

}

if(k==1)/*原数据信息中没有找到与输入职工号相同的职工号*/

{

printf("\n\nNoexit!

please");

printf("\n\nAreyouagain?

\n\t1).again2).Noandback[]\b\b");

scanf("%d",&w1);

if(w1==2)menu();/*返回主菜单*/

}

}while(k==1&&w1==1);/*在没有找到且想再次查找的情况下继续进行循环*/

w4=0;w3=0;

if(k!

==1)/*在查找到的情况下*/

{

printf("\n\nWhatdoyouwanttodo?

\n\t1).Searchanother2).Modify3).Backmenu[]\b\b");

scanf("%d",&w2);

switch(w2)

{case1:

search1();break;/*继续按照职工号查找其他对象*/

case2:

w3=modify_data(k,n);break;/*对查找到的对象进行修改*/

case3:

menu();break;/*返回主菜单*/

}

}

}while(w2==1);

menu();/*返回主菜单*/

}

/***************按职工学历查找模块***************/

 

[流程图]

按职工学历查找模块

用户作出选择,输入一整型数值

1,2,还是3

 

修改

继续查找

返回主菜单

 

图5按职工学历查找模块流程图

[程序]:

search2()

{inti,n,k,w1=1,w2,w3,w4;

structworkers;/*定义结构体变量s,用以储存输入的xueli的值,便于进行比较*/

n=load();/*加载将要记录的个数*/

do/*该do-while循环语句判断是否继续执行该函数*/

{

do/*该do-while循环语句判断是否找到要查找的对象*/

{k=-1;

printf("\n\nEnterxuelithatyouwanttosearch!

xueli:

");

scanf("%s",xueli);

printf_face();/*调出显示数据结构项目函数*/

for(i=0;i

职工号*/

if(strcmp(s.xueli,wor[i].xueli)==0)/*原数据信息中找到与输入职工学历相同的职工*/

{k=i;

printf_one(k);break;

}

if(k==-1)/*原数据信息中没有找到与输入职工学历相同的职工号*/

{printf("\n\nNoexit!

please");

printf("\n\nAreyouagain?

\n\t1).again2).Noandback[]\b\b");

scanf("%d",&w1);

if(w1==2)menu();/*返回主菜单*/

}

}

while(k==-1&&w1==1);/*在没有找到且想再次查找的情况下继续进行循环*/

w4=0;w3=0;

if(k!

=-1)/*在查找到的情况下*/

{printf("\n\nWhatdoyouwanttodo?

\n\t1).Searchanother2).Modify3).Backmenu[]\b\b");

scanf("%d",&w2);

switch(w2)

{case1:

search1();break;/*继续按照职工学历查找其他对象*/

case2:

w3=modify_data(k,n);break;/*对查找到的对象进行修改*/

case3:

menu();break;/*返回主菜单*/

}

}

}

while(w2==1);

menu();/*返回主菜单*/

}

(4)插入模块

[需求分析]该模块的功能是插入职工记录信息并且不能覆盖原有职工信息。

[流程图]

插入模块

 

调用加载函数

让用户输入要插入的职工信息个数

调用整条信息输入函数

用户作出选择,输入1or2

1还是2

 

2返回主菜单

1浏览全部

 

图6插入模块流程图

【程序】

/*************************插入模块*********************/

add()/*插入模块*/

{

inti,n,m,k;

FILE*fp;

n=load();/*加载将要记录的个数*/

printf("Howmanyworkersareyouwanttoadd(0-%d)?

:

",N-1-n);

scanf("%d",&m);/*输入要插入职工信息的个数*/

k=m+n;

for(i=n;i

{

printf("\nInput%dthworkersrecord.\n",i-n+1);

input(i);/*调用整条职工信息输入函数*/

}

if((fp=fopen("worker.txt","ab"))==NULL)

{

printf("cannotopenfile\n");

}

for(i=n;i

if(fwrite(&wor[i],sizeof(structworker),1,fp)!

=1)

printf("filewriteerror\n");

fclose(fp);

printf_back();/*一个任务结束时的选择浏览还是返回的函数*/

}

 

1.4.3公共函数

(1)保存函数save(intn)

[说明]:

形参n控制保存的个数。

[程序]:

voidsave(intn)

{FILE*fp;/*定义文件指针*/

inti;

if((fp=fopen("worker.txt","wb"))==NULL)/*以只写方式为输出打开一个二进制文件,若打不开返回NULL值*/

{printf("\nCannotopenfile\n");

}

for(i=0;i

if(fwrite(&wor[i],sizeof(structworker),1,fp)!

=1)/*若读写成功,则返回值1*/

printf("filewriteerror\n");

fclose(fp);/*关闭文件*/

}

(2)加载函数load()

[说明]:

该函数可以用来加载所有记录,并且可以返回所有记录的个数。

[程序]:

intload()

{FILE*fp;

inti;

if((fp=fopen("worker.txt","rb"))==NULL)/*以只读方式打开二进制文件,若打不开返回NULL值*/

{printf("\nCannotopenfile\n");

returnNULL;}

for(i=0;!

feof(fp);i++)/*在文件关闭之前,向磁盘文件中读入数据块*/

fread(&wor[i],sizeof(structworker),1,fp);

fclose(fp);

return(i-1);/*返回数据块个数值*/

}

(3)职工号输入函数no_input(inti,intn)

[说明]:

该函数对输入职工号进行判断,确保输入的职工号唯一。

形参i表示第i个职工记录,形参n表示总共有n个职工记录。

[程序]:

voidno_input(inti,intn)

{intj,k,w1;

do/*该do-while循环语句用来输入职工号信息并判断号码是否重复*/

{w1=0;

printf("number:

");

scanf("%s",wor[i].number);

for(j=0;wor[i].number[j]!

='\0';j++)/*判断输入的号码是否由0-9间的数字组成*/

if(wor[i].number[j]<'0'||wor[i].number[j]>'9')/*输入数字不是有0-9之间的数字组成*/

{puts("Inputerror!

Onlybemadeupof(0-9).Pleasereinput!

\n");

w1=1;break;}

if(w1!

=1)/*w1!

=1表示输入数字正确*/

for(k=0;k

if(k!

=i&&strcmp(wor[k].number,wor[i].number)==0)/*判断输入的职工号是否已经重复*/

{puts("Thisrecordisexist.pleasereinput!

\n");

w1=1;break;}

}

while(w1==1);/*w1==1表示输入数字有误或者输入的职工号重复*/

}

(4)输入整一个记录函数input(inti)

[说明]:

形参i表示第i个职工记录。

[程序]:

voidinput(inti)

{no_input(i,i);/*调用职工号输入函数*/

printf("name:

");scanf("%s",wor[i].name);

printf("age:

");scanf("%s",wor[i].age);

printf("sex:

");scanf("%s",wor[i].sex);

printf("adress:

");scanf("%s",wor[i].adress);

printf("telephone:

");scanf("%s",wor[i].telephone);

printf("salary:

");scanf("%s",wor[i].salary);

printf("xueli:

");scanf("%s",wor[i].xueli);

}

(5)显示一个记录的函数printf_one(inti)

[说明]:

形参i表示第i个职工记录。

[程序]:

voidprintf_one(inti)

{

printf("%11s%6s%9s%3s%8s%11s%7s%6s\n",

wor[i].number,wor[i].name,wor[i].age,wor[i].sex,wor[i].adress,

wor[i].telephone,wor[i].salary,wor[i].xueli);

}

(6)一个任务结束时的选择浏览还是返回的函数printf_back()

voidprintf_back()

{intk,w;

printf("\n\n\tOK!

!

!

^-^.\n\n");

printf("Whatdoyouwanttodo?

\n\n\t1).Browseallnow\t2).Back:

[]\b\b");

scanf("%d",&w);

if(w==1)browse();/*输入1再次浏览*/

elsemenu();}/*返回主菜单*/

(7)修改整条数据记录函数modify_data(inti,intn)

[说明]:

形参i表示第i个职工记录,形参n表示有n个记录,此函数带回保存控制值w1,当w1=1时表示确认保存。

[程序]:

modify_data(inti,intn)

{intc,w1;

do/*判断输入数字是否在选择范围之内*/

{puts("\nmodifyby=>\n\n1).number2).name3).cancelandback");

printf("Whichyouneeded?

:

[]\b\b");

scanf("%d",&c);

if(c>3||c<1)/*输入数字不在选择范围之内*/

{puts("\nChoiceerror!

pleaseagain!

");getchar();}

}

while(c>3||c<1);

do/*按照选择输出对应数据块*/

{switch(c)

{case1:

no_input(i,n);break;

case2:

printf("name:

");scanf("%s",wor[i].name);break;

case3:

m

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1