2024年1月5日发(作者:)
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2010年春季学期
计算机语言B 课程设计
题 目:教师工资管理系统
专业班级:
姓 名:
学 号:
指导教师:
成 绩:
目 录
摘 要 ...................................................................................................................... 1
前 言 ...................................................................................................................... 2
正 文 ...................................................................................................................... 3
1.
2.
3.
4.
5.
6.
问题描述 ...................................................................................................... 3
需求分析 ...................................................................................................... 3
系统总体设计 .............................................................................................. 3
详细设计 ...................................................................................................... 4
系统测试 ...................................................................................................... 5
软件使用说明书 .......................................................................................... 6
总 结 ...................................................................................................................... 7
参考文献 .................................................................................................................. 8
致 谢 ...................................................................................................................... 9
附件Ⅰ 部分原程序代码 ...................................................................................... 10
摘 要
建立一个“教师工资管理系统”,系统以菜单方式工作,编写存放有教师工资信息,包含教师工号、姓名、月份、应发工资、各种折扣、实发工资等,并可对这些信息进行浏览;可按工号或按姓名查找此信息,建立存放教师工资信息的文件,工资信息有工号、姓名、月份、应发工资、各种折扣、实发工资等,并可对工资信息进行浏览。
关键词:教师工资信息管理;插入;查找;修改;删除;
1
前 言
工资管理是学校管理的重要组成部分,它与学校的人事管理、财务管理有着密切的联系。对于劳资关系相对复杂的学校,手工进行工资的发放工作往往需要耗费大量的人力与时间。由于工资发放在时间和操作上存在着一定的重复性、规律性,这使得工资管理的计算机化成为可能,该项目的提出正是为了在此基础上进一步实现学校员工工资管理的规范化和自动化本系统定会受到各学校的欢迎,拥有一定的市场,可在短时间内收回成本,并有可观的经济效益。
2
正 文
1. 问题描述
由于教职工人数的增加,使得教师工资管理工作繁重,而且手工管理效率极低,急需一个软件系统解决这些问题。为了跟上时代潮流,规范管理,提高财务处的管理水平和管理效率,为全校教师提供方便、快捷、准确的教师工资信息,开发一个“教师工资管理系统”。
;
2. 需求分析
本系统是一个学校内部工资管理系统。对教职员工的基本信息和工资信息进行添加和修改,以供财务处教师工资信息管理,提高了人员的工作效率。
3. 系统总体设计
1:整体结构流程图教师工资管理系统
创建 新增 修改 删除 查找
列表
按工号 按姓名 按工号 按姓名
全部清单
月清单
工资段清单
3
4. 详细设计
对应于总体设计时的系统功能模块图,各个功能模块的处理逻辑如下:
信息输入模块:
打开工资信息文件;
while ( 继续输入 )
{
创建工资档案;
将读入信息添加到工资信息文件中;
是否继续输入;
}
关闭图书信息文件;
信息浏览模块:
打开分类信息列表;
while ( 不到文件结束 )
{
选择列表方式查看
}
关闭工资信息文件返回主菜单;
信息查询模块:
while ( 仍继续查询 )
{
if( 按工号查询 )
{
读入查询的工资条件;
打开工资信息文件;
while( 不到文件结束 )
{
4
顺序读出一个工资信息;
if( 该工资信息符合条件 ) 输出该工资信息;
}
关闭图书信息文件;
提示共有几条符合条件的记录;
}
else
if ( 按姓名查询 )
{
读入工资条件;
打开图书信息文件;
while( 不到文件结束 )
{
顺序读出一个工资的信息;
if( 该工资信息的学历符合条件 ) 输出该工资的信息;
}
关闭图书信息文件;
提示符合条件的记录数;
}
else 提示输入不合适;
提示是否继续查询;
}
5. 系统测试
用以下的例子做测试,选择输入操作,依次输入,图书条码,作者名,返回则选择浏览、查询、修改、删除功能。
5
教
师
工
号
111 aaa
222 bbb
1
1
姓
名
月份
应发工资 各种折扣 实发工 资
岗位技能职务职龄交通业绩房租公积水电其他
工资 工资 津贴 津贴
2000 100
1900 100
100
100
200
150
补贴 津贴 扣款 金
50
50
100
100
200
200
20
20
费
50
50
扣款
50
0
2230
2130
333 ccc 1 1900 100 100 100 50 100 0 20 0 0 2330
6. 软件使用说明书
打开该程序系统,浏览菜单,根据需要选择功能,进行各项操作。
操作如下:
点击运行,进入菜单选择。
输入:将所需的信息输入。
进入查询信息:则屏幕会出现两个对话框——按工号和姓名查找,查处相应工资信息。当查询不能显示需要时进入选择是否继续,选是则重新输入自己所要的信息;选否则返回
当信息输入正确,进入你所需要的菜单程序中:
工资信息:显示月份、工号、姓名、应发工资、各种折扣、实发工资等。
6
总 结
该系统以教师工资信息管理为背景,涵盖了财务处对教师工资信息管理的多种功能,并且有一定的可行性和安全性,确保了各项指定功能得以运行。本系统以基本函数、结构体、枚举性、文件以及链表等多方位知识贯穿实现。
通过此次编程培养了我们结构化程序设计的思想,加深了对高级语言基本语言要素和控制结构的理解,锻炼我们独立思考制作程序的能力,并且掌握了一些课程设计的相关知识与实践操作能力,为以后的学习提供了锻炼的机会。
经过设计和开发,教师工资管理系统基本开发完毕。使学校财务处方便进行数据备份和恢复、数据删除。对于数据的一致性的问题也通过程序进行了有效的解决。从而是我对c语言这门课程有了更好的了解。
但是由于设计时间较短,所以该系统还有许多不尽如人意的地方,比如联机文档比较少,用户界面不够美观,出错处理不够等多方面问题。这些都有待进一步改善。
7
参考文献
[1]++程序设计教程 ,王连相,中国铁道出版社,2007
[2] C语言程序设计,谭浩强,清华大学出版社,1999
[3]C程序设计题解与上机指导,谭浩强,清华大学出版社,1999
[4]
C语言的实际应用,安徽科学技术出版社,2000
[5] C语言函数手册,机械工业出版社,1999
[6] C语言实用程序荟萃,西安电子科技大学出版社,1993
c
8
致 谢
在编写程序的过程中,我们得到了丁政建老师的精心指导以及孜孜不倦的教诲,在老师的指导下,我们的能力得到了提高,同时养成了科学、严谨的作风和习惯,在此,我们对老师的精心栽培表示衷心的感谢!
感谢我们小组同学对我的帮助和指点,尤其感谢我的舍友在非常时期,在生活和学习上帮我许多忙。
在课设即将完成之际,我的心情无法平静,从开始进入课题到课设的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意。
9
附件Ⅰ 部分原程序代码
#include
#include
#include
#include
#include
#define TITLE "n 月份 工号 姓名 应发工资 各种折扣 实发工资n"
#define DATA
" %2d %4ld %-7s %5.1f %8.1f %8.1fn",p1->month,p1->num,p1->name,p1->should_pay,p1->rebate,p1->actual_pay
typedef struct pay
{
long num; /*工号*/
short month; /*月份*/
char name[20]; /*姓名*/
float gw,jn,zw,zl,jt,yj;/*岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴*/
float should_pay; /*应发工资*/
float fz,gj,sd,others;/*房租扣款,公积金,水电费,其它扣款*/
float rebate;
float actual_pay; /*实发工资*/
struct pay *next;
}PAY;
FILE *fp;
PAY *p1=NULL,*p2=NULL,*head=NULL;
void menu();
PAY *input();
10
void output();
void save(PAY *head);
PAY *open();
PAY *insert();
void search();
PAY *del();
PAY *revise();
/*主程序模块*/
void main(void)
{
short sel;
do
{
menu();
scanf("%d",&sel);
switch(sel)
{
case 1:
head=input(); //输入模块
break;
case 2:
head=insert(); //插入模块
break;
case 3:
head=revise(); //修改模块break;
case 4:
head=del(); //删除模块
break;
11
case 5:
search(); //查找模块
break;
case 6:
output(); //输出模块
break;
case 7:
save(head); //保存模块
break;
case 0:
break;
}
}while(sel!=0);
}
/*菜单*/
void menu()
{
printf("nnnnnnn");
printf("tttt *主菜单选项*nn");
printf("tttt1.创建工资档案n");
printf("tttt2.新增工资信息n");
printf("tttt3.修改工资信息n");
printf("tttt4.删除工资信息n");
printf("tttt5.查找工资信息n");
printf("tttt6.分类信息列表n");
printf("tttt7.保 存 信 息n");
printf("tttt0.退 出n");
printf("nnnnnnnn");
}
12
/*输入模块*/
PAY *input()
{
short n=1;
p1=(PAY*)malloc(sizeof(PAY));
if(p1==NULL)
{
printf("内存不足,无法创建链表!");
getch();
}
printf("n请输入第%d位职工的信息(以工号为0结束):n",n);
printf(" 工号:");
scanf("%d",&p1->num);
if(p1->num==0)
{
printf("按任意键返回!");
getch();
free(p1);
return 0;
}
getchar();
printf(" 姓名:");
gets(p1->name);
printf(" 工资月份:");
scanf("%d",&p1->month);
printf(" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:n");
scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj);
printf(" 房租扣款,公积金,水电费,其它扣款:n");
scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others);
13
p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj;
p1->rebate=p1->fz+p1->gj+p1->sd+p1->others;
p1->actual_pay=p1->should_pay-p1->rebate;
while(p1!=NULL)
{
if(n==1)
head=p1;
else
p2->next=p1;
n++;
p2=p1;
p1=(PAY*)malloc(sizeof(PAY));
if(p1==NULL)
{
printf("内存不足,无法创建链表!");
getch();
}
printf("请输入第%d位职工的信息(以工号为0结束):n",n);
printf(" 工号:");
scanf("%d",&p1->num);
getchar();
if(p1->num==0)
{
p1=NULL;
break;
}
printf(" 姓名:");
gets(p1->name);
printf(" 工资月份:");
scanf("%d",&p1->month);
14
printf(" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:n");
scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj);
printf(" 房租扣款,公积金,水电费,其它扣款:n");
scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others);
p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj;
p1->rebate=p1->fz+p1->gj+p1->sd+p1->others;
p1->actual_pay=p1->should_pay-p1->rebate;
}
p2->next=NULL;
//edit by Yan-Xingyu Class Network-021
printf("职工信息已输入,请按任意键返回,并存盘„„");
getch();
return head;
}
/*输出模块*/
void output()
{
short sel,flag,month;
float min,max;
do
{
do
{
printf("nn请选择您的列表方式:n");
printf("tt1.全部清单n");
printf("tt2.按月输出n");
printf("tt3.按工资段输出n");
printf("tt0.返回n");
scanf("%d",&sel);
15
}while(sel!=1&&sel!=2&&sel!=3&&sel!=0);
head=open();
if(head==NULL)
return;
else
switch(sel)
{
case 1:
printf("nttt ******全部清单******n");
printf(TITLE);
p1=head;
do
{
printf(DATA);
p1=p1->next;
}while(p1!=NULL);
break;
case 2:
flag=0;
printf("输入要查的月份:");
scanf("%d",&month);
printf("nttt******第%d月工资清单******n",month);
printf(TITLE);
p1=head;
do
{
if(p1->month==month)
{
printf(DATA);
p1=p1->next;
16
flag=1;
}
else
p1=p1->next;
}while(p1!=NULL);
if(flag==0)
printf("没有该月清单n");
break;
case 3:
flag=0;
printf("输入最低工资:");
scanf("%f",&min);
printf("输入最高工资:");
scanf("%f",&max);
printf("ntt ******%5.1f到%5.1f工资的名单******n",min,max);
printf(TITLE);
p1=head;
do
{
if(p1->actual_pay>min&&p1->actual_pay { printf(DATA); p1=p1->next; flag=1; } else p1=p1->next; }while(p1!=NULL); if(flag==0) printf("没有该工资段的职工n"); 17 break; case 0: break; } }while(sel!=0); } /*保存文件*/ void save(PAY *head) { short write; fp=fopen("","w"); if(fp==NULL) { printf("创建文件失败!"); getch(); return; } p1=p2=head; while(p1!=NULL) { write=fwrite(p1,sizeof(PAY),1,fp); if(!write) { printf("无法写入文件!"); getch(); return; } p1=p1->next; } 18 fclose(fp); printf("成功存盘!"); getch(); } /*打开文件*/ PAY *open() { short n=1,read; fp=fopen("","r"); if(fp==NULL) { printf("无法打开档案文件!"); getch(); return NULL; } if((p1=p2=(PAY*)malloc(sizeof(PAY)))==NULL) { printf("内存不足!"); getch(); return NULL; } read=fread(p1,sizeof(PAY),1,fp); if(!read) { printf("文件读取出错!1"); getch(); return NULL; } if(p1->next==NULL) 19 head=p1; else { do { if(n==1) head=p1; else p2->next=p1; n++; p2=p1; if((p1=(PAY*)malloc(sizeof(PAY)))==NULL) { printf("内存不足!"); getch(); return NULL; } read=fread(p1,sizeof(PAY),1,fp); if(!read) { printf("文件读取出错!2"); getch(); return NULL; } }while(p1->next!=NULL); p2->next=p1; } return head; fclose(fp); } 20 /*插入模块*/ PAY *insert() { PAY *p3=NULL; char sel; head=open(); if(head==NULL) return NULL; else do { printf("请输入要插入的职工信息:n"); p3=(PAY*)malloc(sizeof(PAY)); if(p3==NULL) { printf("内存不足,无法创建链表!"); getch(); } printf(" 工号:"); scanf("%d",&p3->num); getchar(); printf(" 姓名:"); gets(p3->name); printf(" 工资月份:"); scanf("%d",&p3->month); printf(" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:n"); scanf("%f,%f,%f,%f,%f,%f",&p3->gw,&p3->jn,&p3->zw,&p3->zl,&p3->jt,&p3->yj); printf(" 房租扣款,公积金,水电费,其它扣款:n"); scanf("%f,%f,%f,%f",&p3->fz,&p3->gj,&p3->sd,&p3->others); 21 p3->should_pay=p3->gw+p3->jn+p3->zw+p3->zl+p3->jt+p3->yj; p3->rebate=p3->fz+p3->gj+p3->sd+p3->others; p3->actual_pay=p3->should_pay-p3->rebate; p1=head; while(p1!=NULL) { p2=p1; p1=p1->next; } p2->next=p3; p3->next=NULL; printf("成功插入,是否继续?是(Y) 否(N)n"); sel=getch(); }while(sel=='Y'||sel=='y'); printf("n任意键返回,并存盘„„n"); getch(); return head; } /*查找模块*/ void search() { short sel; long num; char name[20],choose; head=open(); if(head==NULL) return; else do 22 { do { printf("n选择查找方式:n"); printf("tt1.按工号查找n"); printf("tt2.按姓名查找n"); scanf("%d",&sel); getchar(); }while(sel!=1&&sel!=2); switch(sel) { case 1: printf("输入要查的工号:"); scanf("%ld",&num); break; case 2: printf("输入要查的姓名:"); gets(name); break; } p1=head; while((p1->next!=NULL)&&(p1->num!=num)&&(strcmp(p1->name,name)!=0)) //用成p1!=NULL有问题? p1=p1->next; if((p1->num==num)||strcmp(p1->name,name)==0) { printf("您要查找的信息如下:n"); printf(TITLE); printf(DATA); } else 23 printf("没有该信息!n"); printf("是否继续?是(Y) 否(N)n"); choose=getch(); }while(choose=='Y'||choose=='y'); printf("任意键返回"); getch(); } /*删除模块*/ PAY *del() { short sel; long num; char name[20],choose; head=open(); if(head==NULL) return NULL; else do { do { printf("n选择删除方式:n"); printf("tt1.按工号删除n"); printf("tt2.按姓名删除n"); scanf("%d",&sel); getchar(); }while(sel!=1&&sel!=2); switch(sel) { 24 case 1: printf("输入要删除的工号:"); scanf("%ld",&num); break; case 2: printf("输入要删除的姓名:"); gets(name); break; } p1=head; if((p1->num==num)||strcmp(p1->name,name)==0) { head=p1->next; printf("删除信息成功!"); } else { while((p1->next!=NULL)&&(p1->num!=num)&&(strcmp(p1->name,name)!=0)) { p2=p1; p1=p1->next; } if((p1->num==num)||strcmp(p1->name,name)==0) { p2->next=p1->next; free(p1); printf("n删除信息成功!n"); } else printf("n没有该信息!n"); 25 } printf("是否继续?是(Y) 否(N)n"); choose=getch(); }while(choose=='Y'||choose=='y'); printf("任意键返回,并存盘„„"); getch(); return head; } /*修改模块*/ PAY *revise() { short sel; long num; char name[20],choose; head=open(); if(head==NULL) return NULL; else do { do { printf("n查找要修改的对象:n"); printf("tt1.按工号查找n"); printf("tt2.按姓名查找n"); scanf("%d",&sel); getchar(); }while(sel!=1&&sel!=2); switch(sel) 26 { case 1: printf("输入要查的工号:"); scanf("%ld",&num); break; case 2: printf("输入要查的姓名:"); gets(name); break; } p1=head; while((p1->next!=NULL)&&(p1->num!=num)&&(strcmp(p1->name,name)!=0)) //用成p1!=NULL有问题? p1=p1->next; if((p1->num==num)||strcmp(p1->name,name)==0) { printf("您要修改的原始信息如下:n"); printf(TITLE); printf(DATA); printf("n将上述信息改为如下信息:n"); printf(" 工号:"); scanf("%d",&p1->num); getchar(); printf(" 姓名:"); gets(p1->name); printf(" 工资月份:"); scanf("%d",&p1->month); printf(" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:n"); scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj); printf(" 房租扣款,公积金,水电费,其它扣款:n"); scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others); 27 p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj; p1->rebate=p1->fz+p1->gj+p1->sd+p1->others; p1->actual_pay=p1->should_pay-p1->rebate; } else printf("你要修改的信息不存在!n"); printf("是否继续?是(Y) 否(N)n"); choose=getch(); }while(choose=='Y'||choose=='y'); printf("任意键返回,并存盘„„"); getch(); return head; } 28
发布者:admin,转转请注明出处:http://www.yc00.com/web/1704418554a1349678.html
评论列表(0条)