1、C语言职工管理表设计报告附代码 第一部分:课程设计的题目与要求1.1、问题的提出熟悉VC6.0的开发环境,掌握基本的编程方法,熟悉用C语言的完 成一个应用程序的设计过程,掌握有关编辑和调试程序的方法和技巧,主要掌握C语言中的结构体、指针及文件操作等内容,了解开发简单应用程序的全过程,包括:分析、设计、编程、调试和编写设计报告。1.2、功能要求显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和进行平均工资;修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示;查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示;删除记录
2、:可删除数据文件中的任一记录;添加记录:可以在数据文件中添加记录并添加记录后对记录内容进行显示;统计:(A)计算各项工资平均工资及总工资,(B)统计符合制定条件以内的工资职工人数及占总职工人数的百分比。(C)按字符表格形式打印全部职工工资信息表及平均工资(包括各项总的平均工资);保存数据文件功能;打开数据文件功能。第二部分 课程设计题目功能2.1 、系统功能模块框图设计 2.2、数据结构说明定义结构体int ss;struct xinxi char ID10; char name20; int num5;person100;“ss”为全局变量”xinxi”为结构体名,”person”为结构体数
3、组,”ID”、”name”、”num”均为结构体成员。其中定义的”ID”和”num”为字符型数组,”int”为整形数组,程序中定义的i,j,folg,k,t,m变量均为整形变量。 2.3、详细设计首先利用程序读入相关文件,然后开始编写程序,实现功能。主函数main调用/按姓名输入函数void xinming()/按ID号输入函数void id()/总工资函数void zong()/增加函数void zhengjia()/修改数据函数void xiugai()/统计函数void tongji()/删除函数void shanchu()。void write()为写函数,void readfile(
4、)为读取指针指向的文件的函数/主函数void main() int score; readfile(); while(score!=0) printf(=n); printf(1职工总工资t2按姓名查询n3按ID号查询t4修改数据n5删除tt6增加n7统计tt0退出n); printf(=n); scanf(%d,&score); switch(score) case 0:break; case 1:zong();break; case 2:xinming();break; case 3:id();break; case 4:xiugai();write();break; case 5:sha
5、nchu();write();break; case 6:zhengjia();write();break; case 7:tongji();break; 定义整型变量score 如果score!=0则执行while循环,然后通过switch循环和case分支显示各个功能。以按姓名输入进行查询信息为例。/按姓名输入void xinming() int i,j,flog=1; char a20; printf(输入姓名:n); scanf(%s,a); for(i=0;iss;i+) if(strcmp(a,personi.name)=0) flog=0; printf(%st%st,perso
6、ni.ID,personi.name); for(j=0;j5;j+) printf(%dt,personi.numj); printf(n);if(flog=1) printf(找不到数据);定义整形变量,i、j、flog,并赋予flog=1,定义a字符型数组,利用for循环中的if语句对从屏幕中输入的值a和结构体数组中的成员进行比较,如2个值相同,则flog=0,并从屏幕中输出信息,如不相等则flog=1,并从屏幕上输出”找不到数据”。查询总工资和按ID号进行查询信息功能大致如此。 写函数,并实现增加数据和修改,删除,统计功能。/增加void zhengjia() printf(输入信息:
7、); scanf(%s%s,personss.ID,personss.name); printf(%s%s,personss.ID,personss.name); scanf(%d %d %d %d %d,&personss.num0, &personss.num1, &personss.num2, &personss.num3, &personss.num4); printf(n); ss+; 末尾由于增加了一组数据,所以需要SS自加1。/修改数据void xiugai() int i,flog=1,t,k,m; char a20;printf(输入ID:n);scanf(%s,a);for
8、(i=0;iss;i+)if(strcmp(a,personi.ID)=0) flog=0; t=i;if(flog=1) printf(找不到数据); return; while(k!=0) printf(=修改信息=n); printf(1姓名tt2基本工资n3职务工资t4津贴n5医疗保险t6公基金ntt0退出n); printf(=n); scanf(%d,&k); switch(k) case 0:break; case 1: printf(输入新姓名:n); scanf(%s,a); strcpy(persont.name,a); break; case 2: printf(输入新的
9、基本工资:n); scanf(%d,&m); persont.num0=m; break; case 3: printf(输入新的职务工资:n); scanf(%d,&m); persont.num1=m; break; case 4: printf(输入新的津贴:n); scanf(%d,&m); persont.num2=m; break; case 5: printf(输入新的医疗保险:n); scanf(%d,&m); persont.num3=m; break; case 6: printf(输入新的公基金:n); scanf(%d,&m); persont.num4=m; brea
10、k; 定义变量值i,flog=1,t,k,m 还有字符型数组a,首先通过if(strcmp(a,personi.name)=0)对输入的信息进行比对,若查找到了数据,便用while里的内容进行循环,并修改,若没有找到,函数通过return返回。以修改某人公积金为例,首先进入case分支,输出“输入新的公基金”,然后通过scanf(%d,&m) persont.num4=m;实现输入新数据,对数据进行修改。2.4调试与测试原始文件:程序运行后如下图所示; 图一:运行程序测试功能一:查询职工总工资。输入1,显示输入需要查询工资人的姓名图二:测试功能一输入姓名,王小民 。结果如图三:图三:显示结果得
11、到结果,显示的序号:03 姓名:王小民 总工资1568 平均值:313。然后输入0退出程序,输入其他功能值,则继续运行其他功能。测试按姓名查询信息功能:输入2后,提示输入需查询信息人的姓名,如图四 图四输入一个姓名,例:方的飞,得到显示结果如图五: 图五输出 ID号07 姓名 方的飞 基本工资 854 职务工资398 津贴 80 医疗保险 59 公积金50。 输出结果正确!继续输入3,测试按ID号查询信息 图六:提示输入ID号输入07号,得到结果如图: 图七得到输出数据无误!继续输入4,执行修改数据功能提示输入需要修改信息人的ID号,如图八: 图八输入ID号为04,结果如图九 图九输入需要修改
12、的信息,例如,修改基本工资则输入2,提示输入新的基本工资,如图十: 图十输入新的基本工资为1234,提示需要继续修改的项目,如图十一: 图十一如不需修改其他信息则程序在根文件夹中得到一个新的文本文档,修改的数据保存在新的文本中,如图十二: 图十二测试数据删除功能,在程序主菜单中输入5,提示输入需要删除信息人的ID,如图十三 图十三输入ID08,返回主菜单,再次使用ID号查询信息输入08时,程序提示找不到数据,如图十四 图十四同时在新建的文本中08号对应的信息已被删除,如图十五: 图十五测试增加信息功能,提示输入信息 图十六然后使用按ID号查询功能,输入ID09,得到结果如图十七所示 图十七并在
13、根文件夹下新建了新的文本,增加了刚刚输入的09号的信息,如图十八 图十八测试功能无误。测试统计功能结果输入7 得到显示结果如图所示,并输入相关数据,如图十六按照题目要求,前三项工资和在2000以上、2000-1500、1500-1000的职工人数为4、1、3个,所占百分比分别为50%、13%、38%。结果显示无误,测试完成第三部分 课程设计总结总结:通过此次课程设计,使对以前C语言中所学的内容有了进一步的印象,并巩固了所学的知识,对C语言的实际应用有了更一步的了解,对常用的函数,语法结构,和一些数据类型的运用,及一些基本知识都进行了一次大的复习,从自己写一个程序的实践过程中,平时理论课遇不到的
14、问题和错误,此时通通显现出来,一些小的漏洞,疏忽便会影响程序最后的运行,例如,在实现增加功能函数中,由于少打了几个取址符&,导致最后程序运行时写入不了新的数据,这些小的问题都会影响最后的运行,此次课设让我写了解到了,在C语言的程序编写中需要更加细心,而且,此次编写的程序仍有部分不足之处,需要今后的努力学习,才能编写出更好的程序。附录:#include#include#include int ss;struct xinxi char ID10; char name20; int num5;person100;char str70;/读文件void readfile()FILE *fp; int
15、i=0,j; if(fp=fopen(90226.txt,r)=NULL) printf(file cannot be openedn); exit(0); fgets(str,70,fp); printf(%s,str); while(!feof(fp)/判断fp是否指向文件尾 fscanf(fp,%s%s,personi.ID,personi.name); for(j=0;j5;j+) fscanf(fp,%d,&personi.numj); i+; ss=i; /将i的值赋予ss,ss始终指向与结构体尾部fclose(fp);for(i=0;iss;i+) printf(%s%10s,p
16、ersoni.ID,personi.name); for(j=0;j5;j+) printf(%13d,personi.numj); printf(n);/按姓名输入void xinming() int i,j,flog=1; char a20; printf(输入姓名:n); scanf(%s,a); for(i=0;iss;i+) if(strcmp(a,personi.name)=0) flog=0; printf(%st%st,personi.ID,personi.name); for(j=0;j5;j+) printf(%dt,personi.numj); printf(n);if(
17、flog=1) printf(找不到数据);/按ID号输入void id() int i,j,flog=1; char a20;printf(输入ID:n);scanf(%s,a);for(i=0;iss;i+)if(strcmp(a,personi.ID)=0) flog=0;printf(%st%st,personi.ID,personi.name);for(j=0;j5;j+)printf(%dt,personi.numj);printf(n);if(flog=1) printf(找不到数据);/总工资void zong() int i,j,flog=1,me=0,ave; char a
18、20; printf(输入姓名:n); scanf(%s,a); for(i=0;iss;i+) if(strcmp(a,personi.name)=0) flog=0; printf(%st%st,personi.ID,personi.name); for(j=0;j5;j+) me=me+personi.numj; ave=me/5; printf(%d %d,me,ave); printf(n);if(flog=1) printf(找不到数据);/写函数void write() FILE *fp; int i=0,j; if(fp=fopen(90226_1.txt,w)=NULL) p
19、rintf(file cannot be openedn); exit(0); fprintf(fp,%s,str);for(i=0;iss;i+) fprintf(fp,%s%10s,personi.ID,personi.name); for(j=0;j5;j+) fprintf(fp,%13d,personi.numj); fprintf(fp,n);fclose(fp);/增加void zhengjia() printf(输入信息:); scanf(%s%s,personss.ID,personss.name); printf(%s%s,personss.ID,personss.name
20、); scanf(%d %d %d %d %d,&personss.num0,&personss.num1,&personss.num2,&personss.num3,&personss.num4); printf(n); ss+; /修改数据void xiugai() int i,flog=1,t,k,m; char a20;printf(输入ID:n);scanf(%s,a);for(i=0;iss;i+)if(strcmp(a,personi.ID)=0) flog=0; t=i;if(flog=1) printf(找不到数据); return; while(k!=0) printf(=
21、修改信息=n); printf(1姓名tt2基本工资n3职务工资t4津贴n5医疗保险t6公基金ntt0退出n); printf(=n); scanf(%d,&k); switch(k) case 0:break; case 1: printf(输入新姓名:n); scanf(%s,a); strcpy(persont.name,a); break; case 2: printf(输入新的基本工资:n); scanf(%d,&m); persont.num0=m; break; case 3: printf(输入新的职务工资:n); scanf(%d,&m); persont.num1=m; b
22、reak; case 4: printf(输入新的津贴:n); scanf(%d,&m); persont.num2=m; break; case 5: printf(输入新的医疗保险:n); scanf(%d,&m); persont.num3=m; break; case 6: printf(输入新的公基金:n); scanf(%d,&m); persont.num4=m; break; /统计void tongji() int sum,i;float a=0,b=0,c=0; float ave1,ave2,ave3; for(i=0;i=2000) a+; if(sum1500) b+
23、; if(sum=1000) c+; printf(%.0f %.0f %.0f,a,b,c); printf(n); ave1=a/ss;ave2=b/ss;ave3=c/ss; printf(%.2f %.2f %.2f,ave1,ave2,ave3); printf(n);/删除void shanchu() int i,flog=1,t,k; char a20;printf(输入ID:n);scanf(%s,a);for(i=0;iss;i+)if(strcmp(a,personi.ID)=0) flog=0; t=i;if(flog=1) printf(找不到数据); return;
24、for(i=t;iss-1;i+) personi=personi+1; ss-; /主函数void main() int score; readfile(); while(score!=0) printf(=n); printf(1职工总工资t2按姓名查询n3按ID号查询t4修改数据n5删除tt6增加n7统计tt0退出n); printf(=n); scanf(%d,&score); switch(score) case 0:break; case 1:zong();break; case 2:xinming();break; case 3:id();break; case 4:xiugai();write();break; case 5:shanchu();write();break; case 6:zhengjia();write();break; case 7:tongji();break;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1