资源描述
《C语言程序设计》课程设计
实习报告
实 验 题 目 职工工资管理
1.问题描述:
添加模块:添加职工或工资的信息
删除模块:能通过姓名或者工号删除职工信息
修改模块:修改职工信息
查询模块:能通过姓名或者工号查询职工信息
显示模块:显示全部职工信息
文件管理模块:负责源数据文件的管理,包括新建、读取和保存源数据
2.概要设计
职工工资管理
添加模块
删除模块
修改模块
查询模块
显示模块
文件管理模块
按姓名
按工号
按姓名
按工号
新建记录数据文件
读取记录数据文件
保存记录数据文件
在各模块处用指针函数来使用后面的保存记录数据文件进行保存。
3.详细设计
include <stdio.h>
# include <stdlib.h>
# include <string.h>
/*宏定义*/
# define N 100 /*假设工人个数是100*/
# define HEADER1 "----------------------------------------------------------------------\n"
# define HEADER2 " | Number | Name | Psex | Age | Time | Ywage | Ykou | Pwage |\n"
# define HEADER3 " |--------|--------|--------|-------|------|-------|------|-------|\n"
# define FORMAT " |%-8d|%-8s|%-8s|%-7d|%-6d|%-7d|%-6d|%-7d|\n"
# define DATA p->num ,p->name,p->sex,p->age,p->time,p->ywage,p->ykou,p->pwage
# define END "-----------------------------------------------------------------------\n"
/**/
typedef struct work
{
int num; /**/
char name[10];
char sex[10];
int age; /**/
int time; /**/
int ywage; /**/
int ykou; /**/
int pwage; /**/
}WORK;
/**/
typedef struct pointer_info
{
WORK*pHead; /**/
int count; /**/
char fname[10]; /**/
int saveflag; /**/
}PI;
/**/
void Menu();
void Add(PI*);
void Del(PI*);
void Save(PI*pi);
void Modify(PI*pi);
void Qur(PI*pi);
void Load(PI*pi);
void New(PI*pi);
void Disp(PI*);
void Wrong();
void printheader();
void main()
{
int sel;
WORK *pwork;
PI pi;
pwork = (WORK*)malloc(N * sizeof(WORK));
pi.pHead = pwork;
pi.count = 0;
pi.fname[0] = '\0';
pi.saveflag = 0;
/*显示主函数*/
Menu();
printf("Please input your choice [0~5]:");
do
{
scanf("%d",&sel);
if (sel == 0)
{
/*if (pi.saveflag ==1)
{
if (strlen(pi.fname))
{
Save(&pi);
}
else
{
New(&pi);
Save(&pi);
}
}*/
break;
}
switch(sel)
{
case 1:
Add(&pi);
break;
case 2:
Del(&pi);
break;
case 3:
Modify(&pi);
break;
case 4:
Qur(&pi);
break;
case 5:
Disp(&pi);
break;
default:
Wrong();
break;
}
}while(1);
pwork = pi.pHead;
free(pwork);
}
void printheader()
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
void Menu()
{
system("cls");
printf(" The Workers' Grade Wage System \n");
printf("****************Menu*************************************\n");
printf(" * 1 添加 *\n");
printf(" * 2 删除 *\n");
printf(" * 3 修改 *\n");
printf(" * 4 查询 *\n");
printf(" * 5 显示 *\n");
printf(" * 0 退出 *\n");
printf ("*********************************************************\n");
}
void Wrong( )
{
printf("\n******Error :input has wrong ! press any key to continue******\n");
}
void Add(PI* pi )
{
int num;
//char sex[10];
int nSex;
int i,flag=0;
WORK * pwork,*p;
do
{
pwork=pi->pHead+pi->count;
p=pi->pHead;
printf("please input the number:(press '0'return menu)");
scanf("%d",&num);
for(i=1;i< pi->count; i++)
{
if(num==p->num)
{
printf ("the number you input has exist,please input another one!\n");
flag=1;
break;
}
p++;
}
if(flag)
{
flag=0;
continue;
}
if (num != 0)
{
pwork->num = num;
}
else
{
Menu();
printf("please input your choice[0~5]:");
break;
}
printf("please input the name:");
scanf("%s",pwork->name);
printf("please input the sex(0 is woman,1 is man):");
scanf( "%d", &nSex );
if( nSex == 0 )
strcpy( pwork->sex,"woman");
else
strcpy( pwork->sex,"man");
printf("please input the time:");
scanf("%d", &pwork->time);
printf("please input the age:");
scanf("%d", &pwork->age);
printf("please input the Ywage:");
scanf("%d", &pwork->ywage);
printf("please input the Ykou:");
scanf("%d", &pwork->ykou);
pwork->pwage = pwork->ywage-pwork->ykou;
pi->count++;
pi->saveflag=1;
}while(1);
}
void Qur(PI * pi)
{
int a,i,num;
WORK *p;
char name[10];
p=pi->pHead;
Menu();
printf("1------search by number\n");
printf("2------search by name\n");
printf("3------return\n");
printf("please input your choice:[1,2]?");
scanf("%d",&a);
if(a==3)
{
return;
}
if(a==1)
{
printf("please input the number for search:");
scanf("%d",&num);
for(i=1;i<= pi->count; i++)
{
if(num==p->num)
{
break;
}
p++;
}
if(i>pi->count)
{
printf("no record found\n");
return;
}
else
{
printheader();
printf(FORMAT,DATA);
printf(END);
}
}
else if(a==2)
{
printf("please input name to search:");
scanf("%s",name);
for(i=1;i<=pi->count;i++)
{
if(strcmp(name,p->name) !=0)
{
break;
}
p++;
}
if(i>pi->count)
{
printf("no record found\n");
return;
}
else
{
printheader();
printf(FORMAT,DATA);
printf(END);
}
}
printf("Please input your choice[0~5]:");
}
void Modify(PI *pi)
{
int num,i;
WORK *p,*pwork;
p = pi->pHead;
Menu();
Disp(pi);
printf("please input the number of work to modify:");
scanf("%d",&num);
for (i = 1;i < pi->count;i++)
{
if (num == p->num)
{
break;
}
p++;
}
if (i > pi->count)
{
printf("no record found\n");
return;
}
else
{
printf("please input the number:(enter '0'return menu)");
scanf("%d",&num);
if (num!=0)
{
p->num =num;
}
else
{
Menu();
return;
}
printf("please input the name:");
scanf("%s",p->name);
printf("please input the sex:");
scanf("%s",p->sex);
printf("please input the age:");
scanf("%d",&p->age);
printf("please input the time:");
scanf("%d",&p->time);
printf("please input the ywage:");
scanf("%d",&p->ywage);
printf("please input the ykou:");
scanf("%d",&p->ykou);
pwork->pwage = pwork->ywage-pwork->ykou;
pi->saveflag = 1;
}
}
/*删除职工记录*/
void Del(PI * pi)
{
int sel,i,num;
char name[10];
WORK *p;/*指针函数*/
p=pi->pHead;
Menu();
printf("1------delete by number\n");/*选择工号*/
printf("2------delete by name\n");/*选择姓名*/
printf("any key other------return\n");/*按别的键就返回*/
printf("please input your choice:[1,2]?\n");
scanf("%d",&sel);
if(sel!=1&&sel!=2)/*按别的键*/
{
return;
}
if( sel == 1 )/*选择工号*/
{
printf("Please input the number to delete:");
scanf("%d",&num);
for(i=1;i<=pi->count;i++)/*按学号搜索*/
{
if(num==p->num)
{
break;
}
p++;
}
if(i>pi->count)
{
printf("no record found\n");
return;
}
else if(i==pi->count) /*删除中间某个记录,只需要将count减1*/
{
pi->count--;
pi->saveflag=1;
printf("record delete successfully!\n");
}
else /*删除某个记录,只要将其后的数据前移覆盖即可*/
{
memcpy(p,p+1,(pi->pHead + pi->count - p)*sizeof(WORK));
pi->count--;
pi->saveflag = 1;
printf("record delete successfully!\n");
}
}
else if(sel == 2)/*选择姓名*/
{
printf("please input name to delete:");
scanf("%s",name);
for(i=1;i<=pi->count;i++)
{
if(strcmp(name,p->name) != 0)
{
break;
}
p++;
}
if(i>pi->count)
{
printf("no record found\n");
return;
}
else if(i==pi->count)/*删除中间某个记录,只需要将count减1*/
{
pi->count--;
pi->saveflag=1;
printf("record delete successfully!\n");
}
else
{ /*删除某个记录,只要将其后的数据前移覆盖即可*/
memcpy(p,p+1,(pi->pHead+pi->count-p)*sizeof(WORK) );
pi->count--;
pi->saveflag=1;
printf("record delete successfully!\n");
}
}
printf("please input your choice[0~5]:");
}
/*显示*/
void Disp(PI * pi)
{
int i;
WORK *p = pi->pHead;
if (pi->count==0)
{
printf("no record found\n");
printf("\nplease input your choice[0~5]:");
return;
}
printheader();
for(i=1;i<=pi->count;i++)
{
printf(FORMAT,DATA);
printf(END);
p++;
}
}
void New(PI *pi)
{
FILE * fp;
char name[10];
char fname[10] =".\\";
printf("please input the date file name foe create:");
scanf("%s",fname);
strcat(fname,name);
strcat(fname,".dat");
fp=fopen(fname,"wb");
if(fp==NULL)
{
printf("\n=====>open file error!\n");
return;
}
strcpy(pi->fname,fname);
fclose(fp);
}
void Load (PI *pi)
{
FILE * fp;
WORK * p=pi->pHead;
char name [10];
char fname [10]= ".\\";
printf( "please input the data file name for load:");
scanf( "%s",name);
strcat(fname,name);
fp=fopen(fname , "rb");
if(fp==NULL)
{
printf("\n====>open file error!\n");
return;
}
pi->count = 0;
pi->saveflag = 0;
while(feof(fp)!=0)
{
if(fread(p,sizeof(WORK),1,fp))
{
pi->count++;
p++;
}
}
strcpy(pi->fname,name);
printf("load data file %s successfully!",name);
fclose(fp);
}
void Save(PI * pi)
{
FILE * fp;
int numwriten;
if (!strlen(pi->fname))
New(pi);
fp=fopen(pi->fname, "wb");
if(fp==NULL)
{
printf("\n====>open file error!\n");
fclose(fp);
return ;
}
if (pi->count)
{
numwriten = fwrite(pi->pHead,1,pi->count * sizeof(WORK),fp);
pi->saveflag = 0;
printf("file save succesefully!");
}
else
printf("no record for save !");
fclose(fp);
}
4测试分析
添加时
Q1:性别通过输入0或1输出woman or man
有if语句进行选择
Q2:实得工资由应发工资减去应扣工资自动得到
在程序中做减法
添加后
删除
Q1:通过工号或姓名删除
使用if语句进行选择,并用for语句对进行搜索
Q2:删除中间摸个记录
删除后
修改
查找
Q1:要求通过工号或者姓名查找
使用if语句
Q2:如果找不到记录则要返回
使用if –else语句找不到就输出源数据
显示
5. 课程设计总结
通过我们小组的共同努力终于完成任务,制作了职工工资管理系统。
虽然这系统我们是参照课本的类似例题制作,但其中还是集大家的努力进行修改,使系统更加完善。但由于能力有限,系统还是不是很稳定。比如,输入进入公司时间时,不能精确到具体时间。
总的来说,我们制作的系统还是能达到基本要求的,实现职工工资管理系统的功能。
自我评价:
通过这次作业,我发现自己的不足之处。对一些C语言的基本东西还是比较陌生,所以不能熟悉运用。增加了负担,所以这给与我提示是要再去好好看几遍书,熟悉其内容。
这次作业我们小组成员也发挥出各自所有的能力,相互协作,共同努力思考,对一些疑难点和问题进行讨论。我也发挥出带头领导的作用,制定出相对合理的工作计划并予以实施。
总的来说,我在这次工作中是投入大量时间和精力的,实实在在的努力!
教师评价
成绩评定:
日期: 年 月 日
展开阅读全文