C语言程序设计报告职工工资管理系统.docx
C语言程序设计报告课程名称:c语言程序设计院 系:管理与经济学院专业班级:工业工程142班学 号:1 4217学生姓名:李海蛟指引教师:杨雪青完毕时间:- 0 6-20报告成绩:* * * *vo i d P as s word。; 密码验证函数void S a ve(st r uct p e rson per); 保存信息函数void Inp u tper( s t ruct perso n per); 录入信息函数void Delp e r (stru c t p e rs o n per); 删除信息函数v oid Modi f yper( s t r u ct p e rs o n per); 修改信息函数 void Findper( s truct p e rson p e r ); /查找信息函数void Inse r tp e r (struc t person per。); 插入信息函数void Sor t per (st r u c t person p e r); /排序 函 数v oid List p er(stru c t pe r son p e r); 显示职工信息void fo r e(stru c t pe r son perz i n t n);/计算税金函数 v oid Menu();/* * * * * * * *矛口仰* * * * * * * *V oid m a i n() /程序入口(system ("co Io r 02 7”); 设立目前窗口的背景色和前景色Password();/调用密码验函数He I p (); /调用系统信息函数Menu(); /调用菜单函数)void lnputper(str uct p er s o n pe r ) /录入职工工资函数原形pp=p e r; 指针指向构造sys t em ("cl s"); /清屏int i;prin t f(”请问你要输入几种职工的信息:");sea nf("%d",&shuru);if (fp= f open ( " inp u tdata'7'wb + " ) = = NULL) 目前目录下与否存 在IN PUTDATA文献 /“wb+”:读写打开或建立一种二进制文献,容许读和写print f ("Cannot openfi I estrikeanykey ex i t!");ge t ch ();exit (1);)f pri n t f ( f p,”职工编号职工姓名基本工资扣款奖金 应发工资税金 实 发工作总工资n ");f o r ( i =O;i<shu r u; i + +)(prints输入职工编号:”);输入职工编号fflus h (stdin);sea n f( " %d " z & p eri. n um);prin t f("输入职工姓名:");/输入职工姓名f f I u s h(st d i n);ge t s(pe r i.nam e );P ri n tf (“输入职工的工资信息;pr i ntf( ” n基本工资:”);/基本工资ff I u s h (s t din);scanff'% f " , &per i.pa i d);p r intf (”n 扣款:"); 扣款 f fl u sh(stdin);sc a nf( " % f "z&peri.disc o unt);p r i nt f (”n 奖金:");奖金f f I ush(s t d i n );scanf("%f" z&p e r i.e x fra);prin tf( ” n 税金:");/税金p r i n tf("n 11 );per i . sum = pe r i .p a i d - p e r i.d i scount+ p eri.e x tra ;p e r i.re a I p a i d=peri.paid - per i. disco unt;f p rin t f( f p;, %6d %8s %5.1 f t %5. 1 f t %3.1f t % 5 . 1 f t %4. lf t n"zpe r i . n umzperi.namezper i .poidzp e ri.d i scountzperi.extra, p e ri.realpai d ,per i. s u m);)void M o di f yper(st r u c t person per) p p = p e r;int idj=0;/id为接受顾客输入的职工编号i f (fp=fopen("modi f y d a t a. s ys"z " wb +") )=NULL) prin t f ("C a n n o t o pen f ile str i ke any key exit!"); ge t ch();exit(l);)f prin t f(f p , ”职工编号职工姓名基本工资 扣款奖金应发工资税金实发 工资总工资壮);P rintf(”n请输入你要修改的职工的编号:"); scan f ("%d"z& i d);Slee p (500);printf("nt查找有关数据."); f or(i=0;i<=15; i +)(Sie e p( 2 50);printf(".");)f o r (i=0;i<shu r u;i+) if (p,i.num=id) 如果找到了就执行下面语句,找不到直接回主界面printf(" n输入新职工编号:");/输入职工编号f flush (s t d i n);seo n f("%d"z&p e ri. num);P rintf("n输入新职工姓名:");输入职工姓名f f I u s h (st d in);gets(per i . n a m e);printf("输入职工的工资信息n ”);p r i n t f ( " n 基本工资:");s ca nf ("f”,&pe r i. p a id);ffl u sh( s t din);p r in t f ( " n 扣款:");s c anf ("%f", &p e r i.di s c o u nt);fflu s h(stdin);pri n tf("n 奖金:");scanf("%f"z&per i.extra);p ri n tf ("n")p e r i.sum = pe r i. poi d - peri.dis c ount+per i. e xtr a ;per i .re a I p a id=per i. pai d - peri.disco u n t;fprint f (fp;, %6d %8s%5.1ft %5.1 f t%3. 1 f t%5.1ft %4.1ftn " z p e r i .numz p er i. n ame, p e r i. paid, pe r i .dis c o u n t zperi.extrazpe r i . r e a I p ai d ,peri.sum);)void Find p er(s t ruct perso n per ) 查询职工工资信息(int i=0j=0Jd; 循环变量和用于接受职工编号printf(“请输入你要查询的职工编号:");scant ( " %d ",& i d);fo r (i=0; i< s h u r u ;i + +)(if (peri. n um= i d) /如果找到你查询的数据就执行下面语句如果找不到。直接回程序主界peri .sum=per i .paid-per i . d iscount+per i .extra;p e r i . r ealpaid = p e r i . p a i d-peri. d i s count;printf(”n职工编号职工姓名 基本工资扣款 奖金应发工资税金实发工 资总工资 n ”);pri n t f( " n%6d %8s %5.1 ft %5.1ft%3. 1 f t %5 . lft %5. 1ft % 5 .If t %4.1ft n n " z p eri. n um, p e ri . n amezp e ri .paidzper i. d iscou n t, per i.extrozper i . go t paidzper i. f a rep er i.realpai d , per i. sum);system ("pa u se");)void I n ser t p er( s true t person p er) /插入职工工资信息(in t f I ag=l;pp=pe r;i nt ij d ;i f (fp=f ope n ( " i nsertdata.sys'7'w b + " )= N ULL)prin t f("Cannot open file stri k e an y key exi t !");g etch ();e x i t(l);)f pdntf( f p,”职工编号职工姓名 基本工资扣款奖金 应发工资 税金实 发工资总工资n“);printf("输入你插入的职工编号:”);scan f ("%d " ,&id);f o r (i=0; i < s h u r u;i + +)(if(per i.n um= = id) 判断职工编号信息否存在?pr i ntf("职工编号信息已经存在! n”);flag=0;getc h ();b rea k ;)i f ( f lag!=0)(shuru+; 插入一种,本来的总数增长1printf("请确认输入要插入职工编号:”);s c on f ("% d", & pe r s huru-1 .num); /如果不存在.,那么就把插入的信息放到构造数组最后pr i ntf("输入职工姓名:”);ff I ush( s t di n );gets(p e rshuru - 1 .n a me);prints输入职工的工资信息 n");p rint f ("n");prin tf(”n 基本工资:“);f f I ush (stdin);s c anf( " %f" z&pershu r u-1. p a i d);print f("n扣款:");fflush (std i n);s c anf ("%f”,&per s h u ru-1 .disc o u n t );p r int f (”'n 奖金:");/奖金 f fl u sh(s t d in);prin tf(、n 税金:");税金 f f I u s h(s t din);pri n tf ("n");peri.sum=peri .paid-peri. disc ount+per i.ex t ra;per i .rea I paid = peri. pai d-p e ri.dis c o u n t;f p rintf (fp;'% 6 d %8s %5.1ft %5.1f t %3.1 ft%5. 1 f t %4.1 f t n " z p er shu ru-1 .numzpershur u -l.name, p er s huru-1. pa i d, p e r s h u r u -1.disco u ntp e rsh u ru-1. ext r a zperi .re a Ipai d z p ers h uru-l.sum);Slee p (500);P r i ntf ("插入数据成功!n“); getch ();)vo i d L i s t pe r (s t r u ct person pe r ) /浏览所有职工工i nt i=0;for (i = 0;i< s h u r u; i+) pe r i .g o tpaid=pe r i. p ai d -peri.discount;i f ( p e r i. gotpaid<)p e r i.fare=0;e I se if (peri.g o t p aid> = &&peri. g o t p aid< 4 999)p er i. f are=per i .go t p a id * 0.05;e I se if (p e ri .gotpaid>=5000 & &pe r i .got paid<l 0 00 0 ) peri. f are=pe r i.got paid * 0 .1;e I se if (p e r i .go t pai d > = 1000 0 & &pe r i.got p oid<9 9 9 9 9) peri.far e =pe r i.go t p aid * 0.2 5;e I s e if ( p er i . go t p aid>= 1 00000 )p e ri.fare=per i .gotpa i d *0.3;p e r i. sum=peri. paid-pe r i .disco u nt+ p eri.e x t ra;per i .real p aid=p e r i. p a id - per i. d i sco u n t ;) prin t f( " n职工编号职工姓名基本工资扣款 奖金 应发工资税金实发工资总工资W);for(i=0;i<s h u r u ;i+)目录1、设计题目-22、设计规定(涉及设计内容描述)23、设计作用与目的34、所用软件35、系统设计 系构造5.1 程序程序图一 一 一一一print f ( " n %6d %8s %5. 1 f t %5.1ft %3.1f t % 5.1 f t % 5 .lft %4.1ft %5.1ff',per i . n umz p er i. n a mezper i . p aid, p e r i .disco u ntzp e r i.e x tro, per i . go t p aidzper i .fo r e ,per i. r ealp a id, p er i .sum);)getch();)void Delper(s t rue t person p er) /删除职工信息函数(pp= p er;str u ct pe r s o n tem p ;int delnum;ch a r ask;int i,j;i f (fp=f o pen ("De I d a t a .sys" , "wb+") = =NULL)(prin t f ("Cannot open file st r ik e an y ke y ex i t!");ge t ch ();exi t (1);)fprintf (fp, ”职工编号 职工姓名 基本工资扣款 奖金 应发工资 税金 实发工资总工资n“);sy s t em ("cl s");P rint f ("n n t请输入你要删除的职工的职工编号:");f f lus h ( s t d in);sea nf( " %d", &delnum);pri n tf(" n t与否确认删除职工%d的信息(y/n) ”,d e Inum);ff I u s h( s tdi n );ask = ge t char ();if(ask ! ='n')(f or(i= 0 ;i< s hu r u ;i + +)(i f(p e ri.num = = d e I n um)b reak;)if(i > shuru)P rin tf(“nt没有你要删除的职工!nelsef o r(j = i ;j<sh u ru; j+ + ) temp = perj; perj =per j + 1 ;pe r j+l = temp;)s h u r u-; /删掉一种职工信息后职工总数相应- 1system ("cis");printf("nn 删除成功!n“);)peri. sum=peri.p a i d -per i .disco u nt+ p er i .ex t r a;p eri. r ealpaid=peri.paid-peri. d iscou n t;f p rint f ( f p," %6d %8s t%5.1f t%5.1f t%5. 1 f t% 5 . Ift%4.1f n ", p er i . n u m, p e r i. n am e , p eri .paid, p eri. discountzperi .extr a ,peri .realpai d #peri .sum);getch();)void Sortp er(stru ct person p er ) /排序函数(int i , Lchose; /i, j为循环变量c h os e为接受顾客输入的排序方式s t rue t per s on t e mp;prin tf ("排序前的数据为n“);print f (" n职工编号 职工姓名 基本工资扣款奖金应发工资 税金实 发工资总工资n ");for(i=O; i <shuru;i+) pr i ntf( " n % 6 d %8s %5.1ft %5.1 f t % 3 .lf t %5 . If t %4.1ftn"zperi.n u mzpe r i.n a m e z p er i . paidzp e r i.discountperi.e x t r a,peri.re a Ip a idzp e ri.sum);)P r i ntf (、nl,按职工编号排序t 2.按总工资(高低)排序n"); printf( ” n请您对的)选择:”);ffl u sh( s tdin);s c anf("% d ",&c h o s e );if (cho s e=l)for(i=0;i<shur u - 1 ;i+)(f or( j =i + 1; j<s h u ru;j+)(if(per i . num> p e r j.num)(temp = peri;per i=per j ;perj= t emp;)pr i ntf("n职工编号 职工姓名基本工资扣款奖金应发工资税金实发工 资总工资n " );for(i=0; i <sh u ru;i + +)(printf ("n %6d %8s %5.1ft % 5.1f t %3. 1 ft %5.1 ft %4.1f t rY',peri .num, p e r i. n a me,peri. p aidzpe r i .disco u ntperi.ext r azpe r i. r ealpa i d,pe r i.s u m);)s y s t e m( " pause");)e Ise i f (chose=2)(for(i= 0 ; i< sh u r u-1 ;i + +)(f or(j=i+l; j<shuru; j + +)(i f( p eri. sum< p e rj. sum) temp=per i;P eri =perj; p erj = t emp;)Pintf(”n职工编号职工姓名 基本工资扣款奖金应发工资税金实发工 资总工资'n ”);f o r( i = 0 ;i<shuru; i +)printf("n %6d %8s %5. 1 f t % 5 . lft %3.1f t %5. 1 f t % 4 .lf n", peri. num,per i .n a me, p eri.p a id, p e r i . discou n t, per i . ex t raz p eri.r e olpa i dzperi .sum);s ys t em ("pause");)void Pas s word () /密码验证函数(cha r * pass = N ULL ; /初始化指针i n t i, co u n t;t ime_t st a r t , end; 时间函数p ass=( cha r *) mall o c (255*sizeof (char); /分派内存whi I e (1 )c o unt=O;prin t f( ” nnnnntN 职工 工资管 理 系统 n”);p r int f ("nt t UserNome:李海蛟 n");pr i ntf ( " ntt Password:");w h i I e ( c o u nt>=0) & &(p ass cou n t + + = get c h ()! = 13) 密码输入if(poss0 =, bz )(co u nt = 0;co n tinu e ;)else i f(pa s s c ou n t-1 =, b')(pr i ntf ("%c%c%c"/ bz / 07 b');cou nt-=2;)el s ep u t c ha r ('*');)pas s -c ount='0/;if(! str c m p (poss,P A SSWORD) 开始验证p rint f (" n nttttttL o gining ");for( i =0; i< = 2 5;i+ + )(Sleep( 2 50);pr i ;)system ("cis");pr i nt f ("nnnnnn n n nttt");pr i ntf("欢 迎登陆职工工 资管理 系统! nn");start= t ime(N U L L );e nd=time(N U L L);while(end-s t a r t <2) 延时2秒执行如下程序(end =time(NULL);)sy s t e m("cl s ");fee(poss); 释放储存密码的内存re t urn ;) free (p a s s); 释放密码错误日勺那块内存 po s s=(cho r *)malloc(25 5*sizeof (ch ar); /重新分派储存密码内存 sys t em ("cis");P rin t f ( " a n n nnnn n nt t tt 码 错 误!"); getch();syst e m ("cis");)void Menu()(s t ruct person pr 5 0 ;/最大职工人数s tru c t per s on * p; /声明一种构造指针P= P er; /指针指向构造变量peri n t ij n ; 接受顾客的选择c ha r ch;用于判断与否继续do(s ystemf'cl s");pr i ntf( " nn");P r in t f(" t t = = = = = =n");P rintf (" tt *职工工资管理系统*n“); print* =* n");i f (!( scant (”d”,&in) =!)p rintf ( " tt*1 .录入职工工资*n");p rintf(" t t*prin*2.修改职工工资*n");p r in t f (" t t*n ");prin t f( " tt * prin tf ("t t *3.查询职工工资*n");p r i ntf("t t *4.浏览职工工资*nH);pr i n tf( " tt*n ");p r i ntf ("tt *p rin t*5.删除职工工资* n");* n");p rint f ("tt *6.插入职工工资prin t f ( " tt*printf ("tt *p rintf("tt *7.职工工资排序* n");pr i ntf(" t t*8.保存职工工资*n");pr i n t f ("tt*n");p r intf("tt * print f ("tt = = = = n"); prin t f(" t t9.安全退出系统*n");请您对的选择:”);5.3产生源程序 -66、实验调试成果(附运营效果图)367、设计中的I可题及解决措施-398、设计心得4 09、参照文献4 1whil e (ch = getchar() !='n,) putchar(c h );P r i n t f("没有此选项,请对的选择!”); ge t c h();c on t inue;)fflush (s t din);sw i tch(in)(co s e 1 :lnputper( pe r); 调用录入职工工资函数 b reak;Mod i f y per(per); /调用修改职工工资函函数 break;Findper (per); 调用查询职工工资函数 bre a k; c ase 4:L istper( p er); 调用浏览职工工资函数bre ok;case 5:De I per(per); 调用删除职工工资函数 br e ak;c ase 6 :I n serf per (per) ; /插入职工工资信息 b r e a k; case 7:Sortper(pe r); 调用职工工资排序函数 b r eak;c as e 8:Save (pe r); /保存职工工资函数b reak;case 9:/退出系统 b r ea k;de f ault:pr i ntf ("没有此选项,请对的选择!”);ge t c h();b r e ak;)w h ile( i n ! = 9);s y s tem ("cl s ");printf ("nnn nnnnn tpr i ntf(”谢谢使用本系统! nn");prin甘("nn t t t ttEn d i n g");for(i= 0 ; i<= 3 0 ; i + +)Sleep(3 0 0);pr i ntf(".");)p r int f ("n");)v o i d He I p()(printf ("= = = = = =n");P r intf(" n n tt t t 系统信息n ");p r i n tf("= = = = = = = = n");print f ( " nnt t本系统是职工工资管理系统,在职工时姓名栏可以输入中 文');printf(" n tt如果在输入中没看到任何信息则是由于输入错误或无信息”);P ri n tf(" n t t系统中的:实发工资=基本工资-扣款,不需要输入”); printf(“ntt实发工资,就可以直接输出实发工资,系统中的:"); p r i n tf (”ntt总工资=基本工资-扣款+奖金。”);P rintf( " ntt本系统制作者:李海蛟t QQ :");prin t f( " n t t E_ma i I :");p rint f (" n t t t Mad e By VC6.0+ +t 6 月 归日'); printf("= = = = = = = =n");p r i n t f( " nntttt 按Ente r 进入“);g etc har();)v o id Save(str u ct pe r s o n p e r )职工工资保存函数(int i,j;PP= P er; /指针指向构造sys t em ( " cis");printf("nnn t t正在保存信息,请耐心等待! n ”);printf ("nntttSa ving ");for(j=0; j 20;j+)(Sleep (300);printf(".");)i f(fp = fopen("p e rji s 12 .do c " ;'wb+") =NU L L) pri n t f ( " Cannot o p en f ile s t rike anykey exit!");ge t ch ();exit( 1 );)fprint f (fp,”职工编号职工姓名基本工资扣款奖金应发工资税金 实发工资总工资nfor( i = 0 ; i<shuru; i+) p er i .go t paid=p e ri .paid-p e r i . d iscount;if (peri.gotpQid<)per i.fa r e=0;e I se i f (per i.g o t p aid>=&&per i .gotp a id<4999)per i.fare = p er i . g ot p ai d * 0 .05;else i f (peri .got pa i d>= 5 000 & &peri.got paid < 1 0 000)peri .fare=peri .gotpa i d* 0.1 ;else if (peri. gotpaid > = 10 000 & & p e r i .gotpo i d< 9 999 9)pe r i.fare=pe r i.go t p a i d * 0. 2 5;else if (pe r i.got p a i d >=100000)p eri.fare=peri.got p a i d*0.3;p e r i.sum=peri.paid-peri .disco unt+per i. extra;p eri. r ea I pa i d=p e r i .paid - pe r i.discou n t;f printf(fp;'n % 6 d %8s % 5.1 ft %5.1 ft % 3 .1 f t %5.1ft %5. lft %4.1f t %5.1ft", peri. n u mzperi. name,per i.paidzperi. d i s coun t zperi.extrazperi.gotpaid,peri. f arezper i . realpaidz p e ri. s um);).设计中的问题及解决措施由于浏览和查询模块中多定义了局部变量,且与全局变量同名将全局变量屏 蔽,以至于这些模块不能达到预期效果,总是只输出近来一次的数据,通过修改后 将其删除,达到了所要日勺效果。使程序得以执行。到目前程序中尚有一小毛病,就 是计算税金是实数双精度与单精度转换存在局限性。7 .学习心得工资管理系统对于决策者和管理者来说都至关重要,因此工资管理系统应当 可觉得顾客提供充足的信息和快捷的查询手段。但始终以来人们使用老式人工的 方式管理文献工资档案,这种管理方式存在着许多缺陷,如:效率低、保密性差, 此外时间一长,将产生大量的文献和数据,这对于查找、更新和维护都带来了不少 的困难。A 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为 人们深刻结识,它已进入人类社会的各个领域并发挥着越来越重要的作用。a 作 为计算机应用的一部分,使用计算机对工资信息进行管理,具有着手工管理所无法 比拟的长处.例如:检索迅速、查找以便、可靠性高、存储量大、保密性好、寿命 长、成本低等。这些长处可以极大地提高工资管理的效率,也是科学化、正规化 管理的重要条件。这一种星期以来,在开发这个工资管理系统过程中我深刻地体会到了自学能 力的重要性。毕竟在学校学习到的知识是有限