C语言程序设计基础课程设计工资系统报告Word文件下载.docx
- 文档编号:22129984
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:68
- 大小:671.26KB
C语言程序设计基础课程设计工资系统报告Word文件下载.docx
《C语言程序设计基础课程设计工资系统报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计基础课程设计工资系统报告Word文件下载.docx(68页珍藏版)》请在冰豆网上搜索。
修改链表信息送到主修改里去
modify(structemployee_gz*head);
修改文件里员工工资信息
Delete(structemployee_gz*head);
删除文件里某员工信息
shanchujd(structemployee_gz*head,charinfo[]);
删除节点信息
zhuceyh();
注册账号
tianjiayh();
添加账户信息
deleteyh();
删除用户信息
choose(structemployee_gz*head,charbumen[]);
选择统计的项目
count_zdgz(structemployee_gz*head,charbumen[]);
用于某部门计算最低工资
count_zggz(structemployee_gz*head,charbumen[]);
用于某部门计算最高工资count_pjgz(structemployee_gz*head,charbumen[]);
用于某部门计算平均工资count_gzfc(structemployee_gz*head,charbumen[]);
用于某部门计算工资方差count_gz(structemployee_gz*head,charbumen[]);
浏览统计的各项工资指标
管理员可进行添加职工账户信息,用于职工登录系统查询信息
2.流程控制
(1)主函数模块
intmain(){
读取账户文件;
do{
1 管理员登录;
函数分支:
1)录入记录:
调用读取职工工资信息文件函数和创建链表函数后写入文件;
2)删除记录:
调用读取职工工资信息文件函数和修改链表函数后重新写入文件;
3)查询记录:
调用读取职工工资信息文件函数和输出所查节点信息函数;
4)修改记录:
调用读取职工工资信息文件函数和修改节点信息函数后重新写入文件;
5)统计记录:
采用两层多分支结构,第一层分支结构进行部门选择,调用读取职工工资信息文件函数和统计最低、最高、平均工资和工资方差函数,统计全公司工资时直接查找和计算;
6)重新登录:
返回主函数;
7)添加登录账户:
调用添加账户函数;
8)修改账户密码:
调用修改密码函数;
9)删除登录账户:
调用删除账户函数;
0)退出系统:
exit(0);
2 职工登录;
第3页
1)查询个人记录:
调用输出符合搜索条件的节点信息函数;
2)浏览公司记录:
调用统计工资函数;
3)重新登录:
4)修改登录密码:
}while(退出系统:
exit(0))
三、详细设计
1.基本数据类型
(1)字符串型;
(2)长整数型;
2.程序设计步骤说明及注释
(1)函数介绍及调用关系见概要设计。
(2)注释见附录(源代码中以标出注释)。
4、调试分析
1.开始创建了链表之后,将整个链表中的信息写入文件时,写入方式不对,向文件里写入数据块内容时,数据以二进制方式存储,新建文件和打开文件的方式必须加上b,并用循环控制,从头结点开始,每次写入一个节点,数据长度为1,而不是其他的数字。
2.修改和删除后文件里的数据出现错乱,再次查询时出现乱码,原因还是操作后的写入方式不对,需要以“wb”方式将原文件清空再将整个链表中的信息写入。
3.进行工资信息统计时,输出结果有错误,加入员工数的输出后发现输出的员工数比录入的多,且其工资为0的情况,进行查询函数检验时发现会输出多余的空信息(无职工名、无工号、工资为零等)或者重复输出,原因应该是存入文件时存在问题,因此在输出查询信息及统计时加入了限制条件将空节点或者多余的信息筛选掉。
4.统计分为各部门和全公司,如果只用一个子函数实现所有统计功能则比较繁琐、函数体太大,因此需再使用子函数分别对各项目进行统计,那么进行不同部门的统计时调用子函数就比较困难。
因此在这些统计最低工资、最高工资、平均工资、工资方差的函数中,需要定义一个部门变量,在条件语句里把部门信息通过参数传递在子函数中使用,从而通过条件语句找到该部门信
第4页
息并统计。
5.在删除和修改函数中,为了避免繁琐,同样调用子函数对链表进行操作,在
进行修改方式和删除方式选择时,需要重新定义一个共同变量并传递给子函数,在判断语句里采用“或”语句对姓名和工号同时搜索。
6.在进行职工信息添加时,开始没有避免重复信息的输入,输入已有的职工工号时,应提示“已有该职工信息!
”,因此要对原文件的内容进行便利检索,同时要对正在建立的链表进行检索,因为无法将原文件内容与正在建立的链
表连接起来,只能通过对两个链表进行两次检索,将正在建立的链表以追加的方式写到已经建立好的文件中(添加到元数据后面)。
7.进行菜单内的操作提示输入有误时,再按任意键会直接退到主菜单,再要进行该操作需重新选择菜单,耗费时间,使用循环语句控制,提示“输入有误时!
”再次提示输入,将新输入的数据重新赋给变量,知道输入信息正确时,包括部门及职务的合法性检验。
8.将职工的基金、税金、应发工资等信息修改后,输出查询的各项结果除以修改的其他的不变,那么就不符合要求,因为应发工资等于基本工资与岗位工资、奖金之和,实发工资等于应发工资减去基金和税金,因此修改这些信息时,需要重新计算,保证各项信息正确。
9.上一界面或者上一语句操作完成后需跳转下一语句,有时会出现两层信息重叠在一起,甚至错误,原因是没有清除上一层内容,因此需要在很多地方加入清屏操作或是删除上一行的操作,进行删除上面多行时,要从所需删的最下面一行开始删除,依次向上。
10.职工登录后,把其工号(用户名)作为参数传递给子函数,查询其个人信息时,按此工号对文件里的内容(先将文件内容读到链表里)进行检索后输出。
11.开始没有修改登录密码的操作,不便于用户使用,增加修改密码函数后,管理员和职工可以各自修改自己的密码,保证用户安全。
后来还同时添加了删除登录账户函数,便于管理员管理。
12.考虑到首次使用时,没有任何账户信息,也没有存储用户的文件,而导致运行故障。
因此首次运行时,增加语句完成管理员用户的注册,注册成功后管理员再进行相关操作。
五、用户手册
1.本程序的运行环境为windowsxp或windows7(32位)的操作系统,执行文件为
第5页
GONGZI~1.EXE。
2.打开运行程序后,按照提示进行登录操作身份分为管理员和职工,依据自己的身份对应用户名及密码登录,身份不符将不能登录,需重新输入。
管理员首次运行应先录入信息,并添加对应的职工登录账户信息。
3.职工登录后菜单与管理员不同,职工只能查询自己信息和浏览公司及各部门最高、最低工资以及平均工资和工资方差信息,并可选择重新登录。
4.管理员进行管理时,可添加、删除登录账户,管理员和职工用户可根据喜好修改自己的登录密码。
5.完成所需操作后可选择重新登录或退出程序。
6、测试数据
1.文件中包含的所有数据
第6页
2.注册账户
3.管理员和职工菜单
第7页
4.录入职工信息
第8页
5.查询信息
6.修改信息
第9页7.删除信息
8.统计单位及项目选择
第10页
9.输出统计信息
第11页
10.查询个人信息
第12页
11.信息合法性校验
第13页
12.提示信息
第14页
13.修改密码
第15页
7、附录
⒈源程序文件清单:
数据:
C:
\\KESHE(员工工资信息文件)C:
\\XITONGJIAMI(账户登录名及密码文件)
⒉源程序
#include<
stdio.h>
stdlib.h>
string.h>
math.h>
conio.h>
bios.h>
structemployee_gz*createlianbiao();
/*声明创建链表函数*/
structemployee_gz*input();
/*声明录入函数*/
structemployee_gz*count_gz(structemployee_gz*head,charbumen[]);
/*声明统计函数*/
structemployee_gz*search(structemployee_gz*head,charxinxi[]);
/*声明查询函数*/
structemployee_gz*modify(structemployee_gz*head);
/*声明修改文件函数*/
structemployee_gz*xiugai(structemployee_gz*head,charinfor[]);
/*声明修改链表函数*/
structemployee_gz*Delete(structemployee_gz*head);
/*声明删除函数*/
structemployee_gz*shanchujd(structemployee_gz*head,charinfo[]);
/*声明删除节点函数*/
voidzhuceyh();
/*声明注册账号函数*/
voidmenu1();
/*声明管理员菜单函数*/
voidmenu2();
/*声明职工菜单函数*/
voidtianjiayh();
/*声明添加账户信息函数*/
voiddeleteyh();
/*声明删除用户函数*/
voidxiugaimm(charyhm[],charshenfen[]);
/*声明修改账户密码函数*/
voidchoose(structemployee_gz*head,charbumen[]);
/*声明统计中的选择函数*/
structemployee_gz*readwenjian(structemployee_gz*head);
/*声明读取文件函数*/
structemployee_gz*shuchuxinxi(structemployee_gz*head,charxinxi[]);
/*声明输出信息函数*/
voidcount_zdgz(structemployee_gz*head,charbumen[]);
/*声明计算最低工资函数*/
voidcount_zggz(structemployee_gz*head,charbumen[]);
/*声明计算最高工资函数*/
voidcount_pjgz(structemployee_gz*head,charbumen[]);
/*声明计算平均工资函数*/
voidcount_gzfc(structemployee_gz*head,charbumen[]);
/*声明计算工资方差函数*/
structemployee_gz
{
chargonghao[20];
/*职工工号*/
charsfzh[20];
/*身份证号*/
charname[20];
/*姓名*/
charbumen[20];
/*部门*/
charzhiwu[20];
/*职位*/
charjiguan[20];
/*籍贯*/
longintjbgz;
/*基本工资*/
longintjijin;
/*基金*/
longintyfgz;
/*应发工资*/
longintshuijin;
/*税金*/
longintjiangjin;
/*奖金*/
longintsfgz;
/*实发工资*/
longintgwgz;
/*岗位工资*/
structemployee_gz*next;
/*指向下一节点的指针*/
};
structpass
charshenfen[20];
/*用户身份*/
charyhm[20];
/*用户名*/
charmima[20];
/*密码*/
structpass*next;
intmain()
FILE*pfp;
structemployee_gz*head;
structpass*ptr,*dl,*mhead,*tail;
charxinxi[20];
intchoice,a,b=0;
system("
graftabl936"
);
textmode(C80);
textcolor(25);
textbackground(7);
clrscr();
head=NULL;
mhead=NULL;
tail=NULL;
if((pfp=fopen("
\\xitongjiami.txt"
"
rb"
))==NULL)
{
gotoxy(20,6);
cprintf("
账户信息文件打开失败!
"
getch();
clrscr();
gotoxy(20,2);
请建立文件并注册用户!
gotoxy(20,3);
请完成下面的注册!
zhuceyh();
}
pfp=fopen("
while(!
feof(pfp))/*将文件中的数据导入链表中*/
ptr=(structpass*)malloc(sizeof(structpass));
fread(ptr,sizeof(structpass),1,pfp);
if(mhead==NULL)
mhead=ptr;
else
tail->
next=ptr;
tail=ptr;
ptr->
next=NULL;
fclose(pfp);
dl=mhead;
gotoxy(22,5);
您的身份是:
1(管理员)2(职工)"
/*登录选择*/
scanf("
%d"
&
a);
delline();
/*删除光标所在行*/
if(a==1)/*管理员登录*/
strcpy(shenfen,"
guanliyuan"
gotoxy(24,5);
用户名:
gotoxy(24,6);
密码:
gotoxy(32,5);
scanf("
%s"
yhm);
gotoxy(32,6);
mima);
while(dl!
=NULL)
if(strcmp(dl->
shenfen,shenfen)==0&
&
strcmp(dl->
yhm,yhm)==0&
mima,mima)==0)
b=1;
do{/*菜单循环控制*/
gotoxy(16,11);
输入您的选择:
choice);
/*清屏*/
switch(choice)/*函数调用*/
case1:
break;
case2:
Delete(head);
case3:
search(head,xinxi);
case4:
modify(head);
case5:
count_gz(head,bumen);
case6:
case7:
case8:
xiugaimm(yhm,shenfen);
main();
case9:
case0:
exit(0);
default:
gotoxy(32,3);
输入有误!
}while(choice!
=0);
dl=dl->
next;
if(b==0)
gotoxy(20,6);
cprintf("
用户名或密码错误!
请重新登录!
getch();
elseif(a==2)/*职工登录*/
zhigong"
工号:
gotoxy(22,6);
gotoxy(30,5);
gotoxy(30,6);
gotoxy(24,11);
strcpy(xinxi,yhm);
/*以工号查询*/
head=readwenjian(head);
shuchuxinxi(head,xinxi);
请重新输入!
}
voidmenu1()/*管理员菜单*/
gotoxy(12,3);
职工工资管理系统"
gotoxy(12,4);
***************************菜单***************************"
gotoxy(12,5);
**1录入工资记录2删除工资记录**"
gotoxy(12,6);
**3查询工资记录4修改工资记录**"
gotoxy(12,7);
**5统计工资信息6重新登录系统**"
gotoxy(12,8);
**7添加账户信息8修改登录密码**"
gotoxy(12,9);
**9删除系统用户0安全退出系统**"
gotoxy(12,10);
**********************************************************"
voidmenu2()/*职工菜单*/
gotoxy(22,3);
职工工资系统"
gotoxy(22,4);
****************菜单***************"
gotoxy(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 基础 课程设计 工资 系统 报告