1、 《C语言程序设计》课程设计 实习报告 实 验 题 目 职工工资管理 1.问题描述: 添加模块:添加职工或工资的信息 删除模块:能通过姓名或者工号删除职工信息 修改模块:修改职工信息 查询模块:能通过姓名或者工号查询职工信息 显示模块:显示全部职工信息 文件管理模块:负责源数据文件的管理,包括新建、读取和保存源数据 2.概要设计 职工工资管理 添加模块 删除模块 修改模块 查询模块 显示模块 文件管理模块 按姓
2、名
按工号
按姓名
按工号
新建记录数据文件
读取记录数据文件
保存记录数据文件
在各模块处用指针函数来使用后面的保存记录数据文件进行保存。
3.详细设计
include
3、\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,
4、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;
5、 /**/ int time; /**/ int ywage; /**/ int ykou; /**/ int pwage; /**/ }WORK; /**/ typede
6、f struct pointer_info { WORK*pHead; /**/ int count; /**/ char fname[10]; /**/ int saveflag; /**/ }PI; /**/ void Menu();
7、 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
8、 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)
9、{ 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; c
10、ase 4: Qur(&pi); break; case 5: Disp(&pi); break; default: Wrong(); break; } }while(1); pwork = pi.pHead; free(pwork); } void printheader() { printf(HEADER1); printf(
11、HEADER2); printf(HEADER3); } void Menu() { system("cls"); printf(" The Workers' Grade Wage System \n"); printf("****************Menu*************************************\n"); printf(" * 1 添加 *\n"); printf(" * 2 删除
12、 *\n"); printf(" * 3 修改 *\n"); printf(" * 4 查询 *\n"); printf(" * 5 显示 *\n"); printf(" * 0 退出 *\n"); printf ("**
13、\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->
14、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++; }
15、 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 ma
16、n):"); 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:"); sc
17、anf("%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-----
18、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++
19、) { 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("%
20、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 you
21、r 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->coun
22、t) { 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); print
23、f("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);
24、 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--
25、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(n
26、um==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 /*删除某个记录,只要将其后的数据前移覆盖即可
27、/ { 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++)
28、 { 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
29、 { /*删除某个记录,只要将其后的数据前移覆盖即可*/ 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; i
30、f (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] =".\\";
31、 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
32、 * 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->save
33、flag = 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
34、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 s
35、ave !"); fclose(fp); } 4测试分析 添加时 Q1:性别通过输入0或1输出woman or man 有if语句进行选择 Q2:实得工资由应发工资减去应扣工资自动得到 在程序中做减法 添加后 删除 Q1:通过工号或姓名删除 使用if语句进行选择,并用for语句对进行搜索 Q2:删除中间摸个记录 删除后 修改 查找 Q1:要求通过工号或者姓名查找 使用if语句 Q2:如果找不到记录则要返回 使用if –else语句找不到就输出源数据 显示 5. 课程
36、设计总结 通过我们小组的共同努力终于完成任务,制作了职工工资管理系统。 虽然这系统我们是参照课本的类似例题制作,但其中还是集大家的努力进行修改,使系统更加完善。但由于能力有限,系统还是不是很稳定。比如,输入进入公司时间时,不能精确到具体时间。 总的来说,我们制作的系统还是能达到基本要求的,实现职工工资管理系统的功能。 自我评价: 通过这次作业,我发现自己的不足之处。对一些C语言的基本东西还是比较陌生,所以不能熟悉运用。增加了负担,所以这给与我提示是要再去好好看几遍书,熟悉其内容。 这次作业我们小组成员也发挥出各自所有的能力,相互协作,共同努力思考,对一些疑难点和问题进行讨论。我也发挥出带头领导的作用,制定出相对合理的工作计划并予以实施。 总的来说,我在这次工作中是投入大量时间和精力的,实实在在的努力! 教师评价 成绩评定: 日期: 年 月 日






