工资信息管理系统
一、题目要求
设计工资信息管理系统,要求该系统能够实现工资信息管理。系统包括录入、浏览、查询、统计等功能。其中录入功能要求能够添加新的工资信息到文件,浏览功能要求能按照工资卡号、姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号、姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额。
需求分析
根据题目要求,由于工资信息是存放在文件中,所以应提供文件的输入输出等操作;在程序中需要浏览工资信息,应提供显示、查找、排序等操作;另外还应提供键盘式选择彩旦实现功能选择。
总体设计
工资信息管理系统菜单
工资信息管理系统菜单
录入
追加
查询
浏览
排序
详细设计
1.主函数
void main()
{
menu();/*主函数只用于调用菜单*/
2.菜单
menu()
{
int n,w1;
do
{
puts("\t\t***************MENU***************\n\n");
puts("\t\t\t\t 1.enter data");
puts("\t\t\t\t 2.addition data");
puts("\t\t\t\t 3.browse all");
puts("\t\t\t\t 4.search");
puts("\t\t\t\t 5.order");
puts("\t\t\t\t 6.exit");
puts("\n\n\t\t **********************************\n");
printf("Choice your number(1-6):[]\b\b");
scanf("%d",&n);
if(n<1||n>6)
{
w1=1;
getchar();
}
else w1=0;
}
while(w1==1);
switch(n)
{
case 1:enter();break;
case 2:add();break;
case 3:browse();break;
case 4:search();break;
case 5:order();break;
case 6:exit(0);
}
return 1;}
3.各功能模块设计
1)录入模块
数据结构
struct employer
{
int month;
char num[11];
char name[20];
float yfgz;
float sf;
float df;
float sj;
float sfgz;
}emp[N];
N为职工人数,在此宏定义为100,
#define N 100
i从0到n-1调用输入函数input(i)输入用户要输入职工记录的个数n那么此阶段的流程图如下
i从0到n-1调用输入函数input(i)
输入用户要输入职工记录的个数n
i!=0
i!=0
保存save(n)
[程序]
enter()
{int i,n;
printf("How many employers(0-%d)?:",N-1);
scanf("%d",&n);
printf("\n Enter data now\n\n");
for(i=0;i
{printf("\n input %dth employer record.\n",i+1);
input(i);
}
if(i!=0) save(n);
printf_back();
}
2)追加模块
先确定要追加信息的条数,调用n=load()函数,再调用输入函数input(),最后保存追加的记录。
整个过的的流程图如下:
调用n=load();并计算可以启示录的个数n
调用n=load();并计算可以启示录的个数n
输入用户要追加学生记录的个数n
k=m+n
i从n到k调用输入函数input(i)
保存追加的记录
[程序]
add()
{ int i,n,m,k;
FILE *fp;
n=load();
printf("How many employers are you want to add(0-%d)?:",N-1-n);
scanf("%d",&m);
k=m+n;
for (i=n;i
{ printf("\n Input %dth employer record.\n",i-n+1);
input(i);
}
if((fp=fopen("record.txt","ab"))==NULL)
{ printf("cannot open file\n");
}
for(i=n;i