h〉
#defineN50
voidmain()/***************主函数***************/
{
voidmenu();/*声明菜单函数*/
menu();/*调用菜单函数*/
}
voidmenu()/***************菜单函数***************/
{
voidenter();
voidadd();
voidbrowse();
voidsearch();
voidorder();
intn,w1;
do
{
puts(”\t\t*********************MENU*************************\n\n”);
puts(”\t\t\t1。
Enter”);
puts("\t\t\t2.Add”);
puts(”\t\t\t3.browseall”);
puts("\t\t\t4。
Search");
puts(”\t\t\t5。
Order");
puts(”\t\t\t6.Exit”);
puts("\n\n\t\t*************************************************\n”);
printf("Choiceyournumber(1—6):
[]\b\b”);
scanf(”%d",&n);
if(n<1||n〉6)/*对选择数字作判断*/
{
w1=1;
getchar();
}
elsew1=0;
}
while(w1==1);
switch(n)/*选择功能*/
{
case1:
enter();break;/*输入模块*/
case2:
add();break;/*追加模块*/
case3:
browse();break;/*浏览模块*/
case4:
search();break;/*查找模块*/
case5:
order();break;/*排序模块*/
case6:
exit(0);
}
}
2、各功能模块设计
(1)输入模块
[数据结构]
把职工的卡号、月份应发工资、水费、电费、税金、实发工资作为结构体成员,如果存放若干个职工信息就用结构体数组。
structlist
{
intnum;
charname[20];
intmonth;
intsalary1;
intwater;
intelectrisity;
floatfax;
floatsalary2;
}list[N];/*list[N]中每个数组元素对应一个职工*/
[流程图]
1
2
/***************输入模块***************/
voidenter()/*输入模块*/
{
voidprintf_back();
voidsave(intn);
voidinput(inti);
inti,n;
printf("howmanyworkers(0—%d)?
:
”,N-1);
scanf("%d”,&n);
printf(”\nenterdatenow\n\n”);
for(i=0;i〈n;i++)
{
printf(”\ninput%dthworkerrecord.\n”,i+1);
input(i);/*调用输入函数*/
}
if(i!
=0)save(n);/*调用保存函数*/
printf_back();/*一个任务结束时让用户选择是浏览还是返回*/
}
⑵追加模块
[需求分析]
该模块的功能是用户需要增加新的职工记录,请从键盘输入并逐条写到原来的输入文件中是追加不是覆盖。
[流程图]
1
2
[程序]
/***************追加模块***************/
voidadd()/*追加模块*/
{
voidprintf_back();
inti,n,m,k;
intload();
voidsave(intn);
voidinput(inti);
FILE*fp;
n=load();
printf(”howmanyworkersareyouwanttoadd(0—%d)?
:
”,N—1—n);
scanf(”%d”,&m);/*输入要追加的个数*/
k=m+n;
for(i=n+1;i〈=k;i++)
{
printf(”\ninput%dthworkersrecord。
\n",i-n);
input(i);/*调用输入函数*/
}
fp=fopen("workers.txt",”ab”)/*以ab方式打开文件,追加保存*/;
for(i=n+1;i〈=k;i++)/*输出到文件*/
fwrite(&list[i],sizeof(structlist),1,fp);
fclose(fp);
printf_back();/*一个任务结束时让用户选择是浏览还是返回*/
}
⑶浏览模块
[需求分析]
该模块的功能是显示所有职工记录工资信息.
[流程图]
[程序]
/***************浏览(全部)模块***************/
voidbrowse()/*浏览模块*/
{
voidprintf_one(inti);
voidprintf_face();
intload();
voidmenu();
inti,n;
n=load();/*加载记录*/
printf_face();/*调用显示数据结构项目函数*/
for(i=0;i〈n;i++)
{
if((i!
=0)&&(i%10==0))/*目的是分屏显示*/
{printf(”\n\npressanykeytocontiune.。
.”);
getch();
puts(”\n\n”);}
printf_one(i);/*调用显示一个记录的函数*/
printf("\n”);
}
printf(”\tthereare%drecord.\n",n);
printf(”\npassanykeytoback..。
");
getch();/*按任意键*/
menu();
}
⑷查找模块
[需求分析]
该模块的功能是根据输入的职工姓名和卡号查找对应的记录。
[流程图]
N
Y
12
1
2
[程序]
/***************查找函数***************/
voidsearch()/*查找模块*/
{
intn,w1;
do
{
puts("\t\t\t1.searchbyname”);
puts(”\t\t\t2.searchbynum”);
scanf(”%d”,&n);
if(n<1||n>2)/*对选择数字作判断*/
{
w1=1;
getchar();
}
elsew1=0;
}
while(w1==1);
switch(n)
{
voidsearch_1();
voidsearch_2();
case1:
search_1();break;
case2:
search_2();break;
}
}
voidsearch_1()/*按姓名查找*/
{
intload();
voidprintf_face();
voidmenu();
voidprintf_one(inti);
inti,n,k,w1=1,w2,w3,w4;
structlists;
n=load();
do
{
do
{
k=-1;
printf("\n\nenternamethatyouwanttosearch!
name:
”);
scanf(”%s",s.name);
printf_face();/*调用显示数据结构项目函数*/
for(i=0;i〈n;i++)/*查找所需数据*/
if(strcmp(s.name,list[i]。
name)==0)
{
k=i;/*找到数据*/
printf_one(k);break;/*调用显示一个记录的函数*/
}
if(k==—1)
{
printf(”\n\nNO。
exit!
please”);
printf(”\n\nareyouagain?
\n\t1).again2).NOandback[]\b\b”);
scanf(”%d”,&w1);
if(w1==2)break;
}
}
while(k==-1&&w1==1);/*如果w1不等于1这直接返回*/
w4=0;w3=0;
if(k!
=—1)/*k不等于—1表示已找到,如果找到则选择操作*/
{
printf(”successful”);
printf(”\n\nwhatdoyouwanttodo?
\n\t1).searchanother2)。
back[]\b\b”);
scanf("%d”,&w2);
}
}
while(w2==1);
menu();
}
voidsearch_2()/*按卡号查找*/
{
intload();
voidprintf_face();
voidmenu();
voidprintf_one(inti);
structlists;
inti,n,k,w1=1,w2,w3,w4;
n=load();
do
{
do
{
k=—1;
printf(”\n\nenternumthatyouwanttosearch!
num:
”);
scanf(”%d”,&s。
num);
printf_face();/*调用显示数据结构项目函数*/
for(i=0;i〈n;i++)/*查找所需数据*/
if(s.num==list[i].num)
{
k=i;/*找到数据*/
printf_one(k);break;/*调用显示一个记录的函数*/
}
if(k==—1)
{
printf("\n\nNO。
exit!
please");
printf("\n\nareyouagain?
\n\t1)。
again2).NOandback[]\b\b”);
scanf(”%d”,&w1);
if(w1==2)break;
}
}
while(k==-1&&w1==1);/*如果w1不等于1这直接返回*/
w4=0;w3=0;
if(k!
=—1)/*k不等于-1表示已找到,如果找到则选择操作*/
{
printf(”\nsuccessful”);
printf("\n\nwhatdoyouwanttodo?
\n\t1).searchanother2)。
back[]\b\b”);
scanf("%d",&w2);
}
}
while(w2==1);
menu();
}
⑸排序模块
[需求分析]
该模块的功能是将职工记录按照一定顺序排序.
[流程图]
N
Y
12
1
2
/***************排序模块***************/
voidorder()/*排序模块*/
{
intw1,n;
voidorder_1();
voidorder_2();
do
{
puts("\t\t\t1。
orderbynum”);
puts(”\t\t\t2.orderbysalary");
scanf(”%d”,&n);
if(n〈1||n>2)/*对选择数字作判断*/
{
w1=1;
getchar();
}
elsew1=0;
}
while(w1==1);
switch(n)
{
case1:
order_1();break;
case2:
order_2();break;
}
}
voidorder_1()/*卡号升序排*/
{
intload();
voidprintf_back();
voidsave(inti);
inti,j,n,k;
voidbrowse();
structlists;
n=load();
for(i=0;i〈n—1;i++)/*选择法排序*/
{
k=i;
for(j=i+1;j〈n;j++)
if(list[j]。
num〈list[k].num)k=j;
s=list[i];
list[i]=list[k];
list[k]=s;
}
save(n);
browse();
puts(”\n\n”);
printf_back();
}
voidorder_2()/*工资降序排*/
{
intload();
voidprintf_back();
voidsave(inti);
inti,j,n,k;
structlists;
n=load();
for(i=0;i〈n-1;i++)
{
k=i;
for(j=i+1;j〈n;j++)/*选择法排序*/
if(list[k]。
salary2〈list[j]。
salary2)k=j;
s=list[i];list[i]=list[k];list[k]=s;
}
save(n);
browse();
puts(”\n\n”);
printf_back();
}
六、程序代码
(每个函数都要有功能说明)
#includeh〉
#includeh〉
#includeh>
#include〈stdlib。
h〉
#defineN50
voidmain()
{
voidmenu();
menu();
}
voidmenu()//主菜单函数
{
voidenter();
voidadd();
voidbrowse();
voidsearch();
voidorder();
intn,w1;
do
{
puts(”\t\t*********************MENU*************************\n\n”);
puts(”\t\t\t1。
Enter”);
puts(”\t\t\t2。
Add");
puts(”\t\t\t3。
browseall”);
puts("\t\t\t4.Search”);
puts("\t\t\t5。
Order”);
puts("\t\t\t6。
Exit”);
puts("\n\n\t\t*************************************************\n");
printf("Choiceyournumber(1-6):
[]\b\b”);
scanf(”%d”,&n);
if(n〈1||n〉6)/*对选择的数字进行判断*/
{
w1=1;
getchar();
}
elsew1=0;
}
while(w1==1);
switch(n)
{
case1:
enter();break;/*输入模块*/
case2:
add();break;/*新增模块*/
case3:
browse();break;/*浏览模块*/
case4:
search();break;/*查找模块*/
case5:
order();break;/*排序模块*/
case6:
exit(0);/*退出模块*/
}
}
structlist//结构体定义工资信息
{
intnum;//工资卡号
charname[20];//姓名
intmonth;//月份
intsalary1;//应发工资
intwater;//水费
intelectrisity;//电费
floatfax;//税金
floatsalary2;//实发工资
}list[N];//list[N]中每个数组元素对应一个职工工资信息
voidenter()//输入模块函数
{
voidprintf_back();
voidsave(intn);
voidinput(inti);
inti,n;
printf("howmanyworkers(1—%d)?
:
",N—1);
scanf(”%d”,&n);//输入职工数目
printf(”\nenterdatenow\n\n");
for(i=0;i〈n;i++)//输入职工各项信息
{
printf(”\ninput%dthstudentrecord。
\n",i+1);
input(i);//调用职工信息输入函数
}
if(i!
=0)save(n);//储存职工信息
printf_back();//执行返回函数
}
voidadd()//新增模块函数
{
voidprintf_back();
inti,n,m,k;
intload();
voidsave(intn);
voidi