《C语言程序设计基础课程设计工资系统报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计基础课程设计工资系统报告.docx(64页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目录一、需求求分析-2二、概要要设计-2三、详细细设计-4四、调试试分析-4五、用户户手册-5六、测试试数据-6七、程序序代码-114 第1页页一、需求求分析1. 第一步,依依据身份份进行登登录,管管理员和和职工所所能进行行的操作作不同,具具备较高高安全性性,同时时用户可可根据需需要修改改自己的的密码,管管理员还还可添加加和删除除用户, 首首次使用用时不存存在用户户,管理理员可进进行注册册,注册册成功后后再进入入使用。2. 多多职工信信息进行行操作时时,建立立动态链链表,每每个节点点包含一一个职员员的工号号、姓名名、工资资等全部部信息,通通过链表表构建一一个完整整的职工工信息库库,链表表具备录
2、录入、删删除、修修改、查查询及统统计功能能,各功功能显示示在菜单单中,由由主函数数分别调调用。3. 为为了避免免一个函函数体过过长,进进行细化化子函数数,小型型子函数数在各个个主调函函数里多多次调用用,便于于使用。4. 以以可读可可写可追追加方式式新建一一个文本本文件,用用于存储储链表里里所有节节点上包包含的信信息,将将节点信信息导入入文件时时,从头头指针开开始,依依次写入入。5. 查查询、修修改、删删除、职职工信息息时,调调用子函函数以只只读方式式打开系系统库文文件,并并将文件件从头至至尾读取取一遍,每每次读取取一个节节点的长长度,将将每次读读取到的的信息依依次导入入到链表表的节点点中去,再
3、再对链表表进行所所需功能能的操作作。修改改和删除除完成后后,将整整个链表表包含的的信息重重新写入入文件,写写入之前前打开系系统库文文件同时时进行格格式化。6. 统统计职工工最高、最低工工资及工工资均方方差时,以以同时方方式将职职工工资资等信息息导入到到链表中中,然后后以子菜菜单的形形式输出出统计的的项目,包包括各部部门和全全公司以以及最高高、最低低工资和和工资均均方差。统计各各部门最最高、最最低工资资和工资资均方差差时需再再调用子子函数分分别进行行操作。统计全全公司最最高、最最低工资资和工资资均方差差时采用用多分支支结构进进行。7. 通通过屏幕幕操作等等函数对对界面进进行处理理,相对对美观。菜
4、单及及所有操操作提示示信息均均采用中中文输出出,每一一步操作作后会有有相应的的提示。如文件件不存在在或为空空时,会会提示“文件打打开失败败!”或“文件是是空的!”或输入入有误时时提示重重新输入入。二、 概要设计计1. 函数设计计mainn(); 主函函数控制制整个程程序流程程,先登登录再进进行子函函数调用用menuu1(); 管理员员菜单函函数menuu2(); 职工菜菜单函数数,可操操作范围围比管理理员小creaatelliannbiaao();创建建链表函函数,用用链表构构建整个个信息库库inpuut(); 录入入函数,将将链表存存进文件件readdwennjiaan(sstruuct e
5、mpployyee_gz *heead);读取取文件内内容到指指定链表表第2页searrch(strructt emmplooyeee_gzz *hheadd,chhar xinnxi);查询员员工工资资信息shucchuxxinxxi(sstruuct empployyee_gz *heead,chaar xxinxxi);输输出查询询到的员员工信息息xiuggai(strructt emmplooyeee_gzz *hheadd,chhar inffor);修改链链表信息息送到主主修改里里去modiify(strructt emmplooyeee_gzz *hheadd); 修改改文件里里
6、员工工工资信息息Deleete(strructt emmplooyeee_gzz *hheadd); 删除除文件里里某员工工信息shannchuujd(strructt emmplooyeee_gzz *hheadd,chhar inffo);删删除节点点信息zhucceyhh(); 注册册账号tiannjiaayh();添添加账户户信息deleeteyyh(); 删删除用户户信息chooose(strructt emmplooyeee_gzz *hheadd,chhar bummen); 选择统统计的项项目counnt_zzdgzz(sttrucct eemplloyeee_ggz *hea
7、ad,ccharr buumenn); 用于某某部门计计算最低低工资counnt_zzggzz(sttrucct eemplloyeee_ggz *heaad,ccharr buumenn); 用于某某部门计计算最高高工资ccounnt_ppjgzz(sttrucct eemplloyeee_ggz *heaad,ccharr buumenn); 用于某某部门计计算平均均工资ccounnt_ggzfcc(sttrucct eemplloyeee_ggz *heaad,ccharr buumenn); 用于某某部门计计算工资资方差ccounnt_ggz(sstruuct empployyee_g
8、z *heead,chaar bbumeen);浏浏览统计计的各项项工资指指标tiannjiaayh(); 管管理员可可进行添添加职工工账户信信息,用用于职工工登录系系统查询询信息2. 流程控制制(1) 主函数模模块int maiin()读取账户户文件;do 管理员登登录;函数分支支:1)录入记记录:调调用读取取职工工工资信息息文件函函数和创创建链表表函数后后写入文文件; 2)删删除记录录:调用用读取职职工工资资信息文文件函数数和修改改链表函函数后重重新写入入文件; 3)查查询记录录:调用用读取职职工工资资信息文文件函数数和输出出所查节节点信息息函数; 4)修修改记录录:调用用读取职职工工资资
9、信息文文件函数数和修改改节点信信息函数数后重新新写入文文件; 5)统统计记录录:采用用两层多多分支结结构,第第一层分分支结构构进行部部门选择择,调用用读取职职工工资资信息文文件函数数和统计计最低、最高、平均工工资和工工资方差差函数,统统计全公公司工资资时直接接查找和和计算; 6)重重新登录录:返回回主函数数; 7)添添加登录录账户:调用添添加账户户函数; 8)修修改账户户密码:调用修修改密码码函数; 9)删删除登录录账户:调用删删除账户户函数; 0)退退出系统统:exxit(0); 职工登录录;第3页函数分支支:1)查询个个人记录录:调用用输出符符合搜索索条件的的节点信信息函数数; 2)浏浏览
10、公司司记录:调用统统计工资资函数; 3)重重新登录录:返回回主函数数; 4)修修改登录录密码:调用修修改密码码函数; 0)退退出系统统:exxit(0);whiile(退出系系统:eexitt(0)三、详细细设计1. 基基本数据据类型 (11)字符符串型; (22)长整整数型;2. 程程序设计计步骤说说明及注注释 (1)函函数介绍绍及调用用关系见见概要设设计。 (2)注注释见附附录(源源代码中中以标出出注释)。四、 调试分析析1. 开开始创建建了链表表之后,将将整个链链表中的的信息写写入文件件时,写写入方式式不对,向向文件里里写入数数据块内内容时,数数据以二二进制方方式存储储,新建建文件和和打
11、开文文件的方方式必须须加上bb,并用用循环控控制,从从头结点点开始,每每次写入入一个节节点,数数据长度度为1,而而不是其其他的数数字。2. 修修改和删删除后文文件里的的数据出出现错乱乱,再次次查询时时出现乱乱码,原原因还是是操作后后的写入入方式不不对,需需要以“wb”方式将将原文件件清空再再将整个个链表中中的信息息写入。 3. 进进行工资资信息统统计时,输输出结果果有错误误,加入入员工数数的输出出后发现现输出的的员工数数比录入入的多,且且其工资资为0的的情况,进进行查询询函数检检验时发发现会输输出多余余的空信信息(无无职工名名、无工工号、工工资为零零等)或或者重复复输出,原原因应该该是存入入文
12、件时时存在问问题,因因此在输输出查询询信息及及统计时时加入了了限制条条件将空空节点或或者多余余的信息息筛选掉掉。4. 统统计分为为各部门门和全公公司,如如果只用用一个子子函数实实现所有有统计功功能则比比较繁琐琐、函数数体太大大,因此此需再使使用子函函数分别别对各项项目进行行统计,那那么进行行不同部部门的统统计时调调用子函函数就比比较困难难。因此此在这些些统计最最低工资资、最高高工资、平均工工资、工工资方差差的函数数中,需需要定义义一个部部门变量量,在条条件语句句里把部部门信息息通过参参数传递递在子函函数中使使用,从从而通过过条件语语句找到到该部门门信第4页 息并统统计。5. 在在删除和和修改函
13、函数中,为为了避免免繁琐,同同样调用用子函数数对链表表进行操操作,在在 进进行修改改方式和和删除方方式选择择时,需需要重新新定义一一个共同同变量并并传递给给子函数数,在判判断语句句里采用用“或”语句对对姓名和和工号同同时搜索索。6. 在在进行职职工信息息添加时时,开始始没有避避免重复复信息的的输入,输输入已有有的职工工工号时时,应提提示“已有该该职工信信息!”,因此此要对原原文件的的内容进进行便利利检索,同同时要对对正在建建立的链链表进行行检索,因因为无法法将原文文件内容容与正在在建立的的链 表表连接起起来,只只能通过过对两个个链表进进行两次次检索,将将正在建建立的链链表以追追加的方方式写到到
14、已经建建立好的的文件中中(添加加到元数数据后面面)。7. 进进行菜单单内的操操作提示示输入有有误时,再再按任意意键会直直接退到到主菜单单,再要要进行该该操作需需重新选选择菜单单,耗费费时间,使使用循环环语句控控制,提提示“输入有有误时!”再次提提示输入入,将新新输入的的数据重重新赋给给变量,知知道输入入信息正正确时,包包括部门门及职务务的合法法性检验验。8. 将将职工的的基金、税金、应发工工资等信信息修改改后,输输出查询询的各项项结果除除以修改改的其他他的不变变,那么么就不符符合要求求,因为为应发工工资等于于基本工工资与岗岗位工资资、奖金金之和,实实发工资资等于应应发工资资减去基基金和税税金,
15、因因此修改改这些信信息时,需需要重新新计算,保保证各项项信息正正确。9. 上上一界面面或者上上一语句句操作完完成后需需跳转下下一语句句,有时时会出现现两层信信息重叠叠在一起起,甚至至错误,原原因是没没有清除除上一层层内容,因因此需要要在很多多地方加加入清屏屏操作或或是删除除上一行行的操作作,进行行删除上上面多行行时,要要从所需需删的最最下面一一行开始始删除,依依次向上上。10. 职工登登录后,把把其工号号(用户户名)作作为参数数传递给给子函数数,查询询其个人人信息 时,按按此工号号对文件件里的内内容(先先将文件件内容读读到链表表里)进进行检索索后输出出。11. 开始没没有修改改登录密密码的操操
16、作,不不便于用用户使用用,增加加修改密密码函数数后,管管 理理员和职职工可以以各自修修改自己己的密码码,保证证用户安安全。后后来还同同时添加加了删 除登登录账户户函数,便便于管理理员管理理。12. 考虑到到首次使使用时,没没有任何何账户信信息,也也没有存存储用户户的文件件,而导导致运 行故故障。因因此首次次运行时时,增加加语句完完成管理理员用户户的注册册,注册册成功后后管 理员再再进行相相关操作作。五、用户户手册1. 本程序的的运行环环境为wwinddowss xpp或wiindoows 7(332位)的操作作系统 ,执行行文件为为第5页 GOONGZZI11.EXXE。2. 打打开运行行程序
17、后后,按照照提示进进行登录录操作身身份分为为管理员员和职工工,依据据自己的的身份对对应用户户名及密密码登录录,身份份不符将将不能登登录,需需重新输输入。管管理员首首次运行行应先录录入信息息,并添添加对应应的职工工登录账账户信息息。 3. 职职工登录录后菜单单与管理理员不同同,职工工只能查查询自己己信息和和浏览公公司及各各部门最最高、最最低工资资以及平平均工资资和工资资方差信信息,并并可选择择重新登登录。4. 管管理员进进行管理理时,可可添加、删除登登录账户户,管理理员和职职工用户户可根据据喜好修修改自己己的登录录密码。5. 完完成所需需操作后后可选择择重新登登录或退退出程序序。六、 测试数据据
18、1. 文文件中包包含的所所有数据据 第6页页2. 注注册账户户3.管理理员和职职工菜单单 第7页页4. 录录入职工工信息第8页 5. 查询询信息 6. 修改改信息第9页77. 删删除信息息8. 统统计单位位及项目目选择第10页页 9. 输出出统计信信息第11页页10. 查询个个人信息息 第第12页页11. 信息合合法性校校验 第第13页页12. 提示信信息 第第14页页 133. 修修改密码码 第第15页页 七、 附录 源程程序文件件清单: 数数据:CC:KESSHE(员员工工资资信息文文件) C:XXITOONGJJIAMMI(账账户登录录名及密密码文件件) 源程程序#inccludde#i
19、nccludde#inccludde#inccludde#inccludde#inccluddestruuct empployyee_gz *crreatteliianbbiaoo();/*声声明创建建链表函函数*/struuct empployyee_gz *innputt(); /*声声明录入入函数*/struuct empployyee_gz *coountt_gzz(sttrucct eemplloyeee_ggz *heaad,ccharr buumenn);/*声明统统计函数数*/struuct empployyee_gz *seearcch(sstruuct empployyee
20、_gz *heead,chaar xxinxxi);/*声明明查询函函数*/struuct empployyee_gz *moodiffy(sstruuct empployyee_gz *heead); /*声明明修改文文件函数数*/struuct empployyee_gz *xiiugaai(sstruuct empployyee_gz *heead,chaar iinfoor);/*声明明修改链链表函数数*/struuct empployyee_gz *Deelette(sstruuct empployyee_gz *heead); /*声明明删除函函数*/struuct empploy
21、yee_gz *shhancchujjd(sstruuct empployyee_gz *heead,chaar iinfoo);/*声明删删除节点点函数*/voidd zhhuceeyh(); /*声明注注册账号号函数*/voidd meenu11(); /*声明明管理员员菜单函函数*/voidd meenu22(); /*声明明职工菜菜单函数数*/voidd tiianjjiayyh(); /*声明明添加账账户信息息函数*/voidd deeletteyhh(); /*声明删删除用户户函数*/voidd xiiugaaimmm(chhar yhmm,chaar sshennfenn); /
22、*声声明修改改账户密密码函数数*/voidd chhoosse(sstruuct empployyee_gz *heead,chaar bbumeen); /*声明明统计中中的选择择函数*/struuct empployyee_gz *reeadwwenjjiann(sttrucct eemplloyeee_ggz *heaad);/*声声明读取取文件函函数*/struuct empployyee_gz *shhuchhuxiinxii(sttrucct eemplloyeee_ggz *heaad,ccharr xiinxii);/*声明输输出信息息函数*/voidd coountt_zdd
23、gz(strructt emmplooyeee_gzz *hheadd,chhar bummen);/*声声明计算算最低工工资函数数*/voidd coountt_zgggz(strructt emmplooyeee_gzz *hheadd,chhar bummen);/*声声明计算算最高工工资函数数*/voidd coountt_pjjgz(strructt emmplooyeee_gzz *hheadd,chhar bummen);/*声声明计算算平均工工资函数数*/voidd coountt_gzzfc(strructt emmplooyeee_gzz *hheadd,chhar bum
24、men);/*声声明计算算工资方方差函数数*/struuct empployyee_gz chaar ggongghaoo200; /*职工工工号*/ chaar ssfzhh200; /*身份证证号*/ chaar nnamee200; /*姓名*/ chaar bbumeen220; /*部门*/ chaar zzhiwwu220; /*职位*/ chaar jjiguuan20; /*籍贯*/ lonng iint jbggz; /*基本工工资*/ lonng iint jijjin; /*基金*/ lonng iint yfggz; /*应发工工资*/ lonng iint shuui
25、jiin; /*税金*/ lonng iint jiaangjjin; /*奖金*/ lonng iint sfggz; /*实发工工资*/ lonng iint gwggz; /*岗位工工资*/ strructt emmplooyeee_gzz *nnextt; /*指指向下一一节点的的指针*/;struuct passs chaar sshennfenn200; /*用用户身份份*/ chaar yyhm20; /*用用户名*/ chaar mmimaa200; /*密码*/ strructt paass *neext; /*指向下下一节点点的指针针*/;int maiin() FILLE
26、 *pfpp; strructt emmplooyeee_gzz *hheadd; strructt paass *pttr,*dl,*mhheadd,*ttaill; chaar bbumeen220; chaar xxinxxi220; chaar yyhm20; chaar sshennfenn200; chaar mmimaa200; intt chhoicce,aa,b=0; sysstemm(ggrafftabbl 9936); texxtmoode(C800);ttexttcollor(25);teextbbackkgrooundd(7); clrrscrr(); heaad=N
27、NULLL; mheead=NULLL; taiil=NNULLL; if(pffp=ffopeen(C:xiitonngjiiamii.txxt,rbb)=NNULLL) gootoxxy(220,66);ccpriintff(账账户信息息文件打打开失败败!); geetchh();clrrscrr(); gootoxxy(220,22);ccpriintff(请请建立文文件并注注册用户户!); gootoxxy(220,33);ccpriintff(请请完成下下面的注注册!); zhhuceeyh(); clrrscrr(); pfpp=foopenn(CC:xittonggjiaami.
28、txtt,rb); whiile(!feeof(pfpp) /*将文件件中的数数据导入入链表中中*/ pttr=(strructt paass *)mmallloc(sizzeoff(sttrucct ppasss); frreadd(pttr,ssizeeof(strructt paass),1,pfpp); iff(mhheadd=NNULLL) mmheaad=pptr; ellse ttaill-nnextt=pttr; taail=ptrr; pttr-nexxt=NNULLL; fcllosee(pffp); dl=mheead; gottoxyy(222,5);cpprinntf
29、(您的的身份是是:1(管理员员) 2(职职工); /*登录选选择*/ scaanf(%dd,&a); gottoxyy(222,5);deelliine(); /*删删除光标标所在行行*/ if(a=1) /*管理员员登录*/ sttrcppy(sshennfenn,gguannliyyuann); gootoxxy(224,55);ccpriintff(用用户名:); gootoxxy(224,66);ccpriintff(密密 码码:); gootoxxy(332,55);sscannf(%s,&yyhm); gootoxxy(332,66);sscannf(%s,&mmimaa); wh
30、hilee(dll!=NNULLL) iif(sstrccmp(dl-shhenffen,sheenfeen)=0&sttrcmmp(ddl-yhmm,yhhm)=0&sttrcmmp(ddl-mimma,mmimaa)=0) b=11; do /*菜单循循环控制制*/ cllrsccr();meenu11(); gootoxxy(116,111);cprrinttf(输入您您的选择择:); sccanff(%d,&chhoicce); cllrsccr(); /*清屏*/ swwitcch(cchoiice) /*函函数调用用*/ ccasee 1:inpput();bbreaak; cca
31、see 2:Delletee(heead);brreakk; ccasee 3:seaarchh(heead,xinnxi);brreakk; ccasee 4:moddifyy(heead);brreakk; ccasee 5:couunt_gz(heaad,bbumeen);breeak; ccasee 6:maiin(); ccasee 7:tiaanjiiayhh();breeak; ccasee 8:xiuugaiimm(yhmm,shhenffen); maiin();brreakk; ccasee 9:delleteeyh();bbreaak; ccasee 0:exiit(00
32、); ddefaaultt:gootoxxy(332,33);ccpriintff(输输入有误误!); geetchh();breeak; whhilee(chhoicce!=0); ddl=ddl-nexxt; iff(b=0) cclrsscr();ggotooxy(20,6); ccpriintff(用用户名或或密码错错误!请请重新登登录!);ggetcch(); mmainn(); elsse iif(aa=22) /*职职工登录录*/ sttrcppy(sshennfenn,zzhiggongg); gootoxxy(222,55);ccpriintff(工工 号号:); gooto
33、xxy(222,66);ccpriintff(密密 码码:); gootoxxy(330,55);sscannf(%s,&yyhm); gootoxxy(330,66);sscannf(%s,&mmimaa); whhilee(dll!=NNULLL) iif(sstrccmp(dl-shhenffen,sheenfeen)=0&sttrcmmp(ddl-yhmm,yhhm)=0&sttrcmmp(ddl-mimma,mmimaa)=0) b=11; do /*菜单循循环控制制*/ cllrsccr();meenu22(); gootoxxy(224,111);cprrinttf(输入您您的选择择:); sccanff(%d,&chhoicce); cllrsccr(); swwitcch(cchoiice) /*函函数调用用*/ ccasee 1:strrcpyy(xiinxii,yhhm); /*以以工号查查询*/ heaad=rreaddwennjiaan(hheadd); shuuchuuxinnxi(heaad,xxinxxi); gettch();bbreaak; ccasee 2:couunt_gz(heaad,bbumeen);breeak; ccasee 3