一 引 言
1.1编写目的......................................................... 3 1.2开发背景....................................................3错误!未定义书签。
2.1 要求..............................................................4 3.1 系统分析..........................................................4 3.2工作负荷..........................................................5 3.3 软件设计环境......................................................5 二 需求分析
1.1 数据流图......................................................... 5 1.2 数据字典.........................................................7 2.1用户登录信息表...................................................11
2.2工资计算标准表...................................................11 2.3 出勤汇总表.......................................................12 2.4银行发放工资表...................................................12 3.1 对功能的规定.....................................................12 三 概要设计 错误!未定义书签。
1.1结构............................................................12 1.2 功能与模块的关系................................................13 2.1 外部接口........................................................13 2.2 内部接口........................................................13 四 系统实现
1.1系统登录界面...................................................14 1.2系统管理员管理主界面及工资汇总界面.............................14 1.3教职工查询工资主界面...........................................14 1.4用户管理界面...................................................14 1.5添加工资单界面.................................................14 1.6密码修改界面...................................................14 1.7工资单打印界面.................................................14 五 课程设计总结........................................................15 六 程序代码...........................................................15 1.1 软件测试.......................................................27 七 参考文献...........................................................29
1
一 可行性分析 1 引言 1.1编写目的
可行性研究的目的是为了对问题进行研究,以最小的代价在最短的时间内确定问题是
否可解
经过对此项目进行详细调查研究,初拟系统实现报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排。明确开发风险及其所带来的经济效益。本报告经审核后,交软件经理审查。
1.2背景
开发软件名称:学校内部工资管理系统。 项目与其他软件,系统的关系:
本项目采用客户机/服务器原理,客户端的程序是建立在Windows NT 系统上以PB9.0开发软件的应用程序,服务器端采用Linux 为操作系统的工作站,是采用SQL 2000的为开发软件的数据库服务程序。
1.3定义
(1)员工考勤统计信息。包括的数据项有缺勤时间、缺勤天数、缺勤类别等。这些信息可从考勤管理系统中获取。
(2)员工工种等信息。包括的数据项有工种等级、工种基本工资等。 (3)员工津贴信息。包括的数据项有加班时间、加班天数、加班类别等。
(4)员工医疗保险信息。包括的数据项有医疗保险时间、医疗费用保险、社会保险费用等。
(5)员工基本信息。包括的数据项有员工号、员工姓名、员工工种、员工所属部门等。 (6)员工月工资信息。包括的数据项有生成工资的时间、基本工资、缺勤扣除、加班费用、医疗保险费、月应发工资等。
(7)员工年终奖金信息。包括的数据项有年份、员工的年终奖金数额等。
2
2可行性研究的前提
2.1要求
主要功能:工资管理涉及学校管理的多个方面,如员工职务工种变化、员工考勤情况、员工加班情况、员工医疗保险等等。根据这些信息,在每个月的某个固定时间,生成企业员工的月工资。对于月工资,能够实现按照员工、部门、月、年、进行统计分析,产生相应报表。
性能要求:
在学校范围内统一各种原始单据的格式,统一账目和报表的格式。 删除不必要的管理冗余,实现管理规范化、科学化。
程序代码标准化,软件统一化,确保软件的可维护性和实用性。
能够连接各个关联的数据库,获取数据库中的信息。保证各个数据库表格相关的项目之间有相同的属性。
输入要求:数据完整,详实。 输出要求:简捷,快速,实时。
安全与保密要求: 管理员享有对教职工工资信息的管理与修改。人事处只享有对教职工个人信息信息库的部分修改(写入与读出)。
完成期限:预计2个月,即截止2013年1月。
3.1系统的分析
学校内部的人事的管理,从大的方面分,主要集中在学校职员的个人情况,工资细目,调入调出及用车等。所以该系统主要是实现对数据的录入,插入,删除,网上查询,统计,更新,打印等功能。其次,为了信息的保密与安全,系统还要提供一定的安全机制。根据以上系统的功能分析,该系统决定采用MDI风格,它主要分为以下几个模块。
文件模块:此模块实现本系统对数据的打开,保存,打印预览,打印及用户管理等功能,并可由此推出系统。
信息管理模块:此模块实现系统的信息管理,包括对职工情况一览表,职工调入调出情况表,职工工资表及其它各表的信息数据的插入,删除,修改,保存等功能。
查询模块:此模块实现本系统的查询功能,能将个人的基本情况,调入调出情况,工资情况等检索出来,并可实现多条件查询和模糊查询。
工资标准设立模块:此模块用于对数据库中的信息按照一定的规则对工资进行标准设立。
系统服务模块:此模块用来系统管理人员设置密码和对系统的功能和开发信息进行介绍等。
以根据要求修改员工工资。如果系统没有检测到该员工的信息则返回上一层,管理员重新输入员工信息,直到查到该员工的信息,并进行修改位置。
如果登录者不是管理员,只是普通员工的帐号,则进入普通帐号界面,输入要查询的员工号,系统自动判断该员工号是否存在,如果存在则显示该员工的工资信息。如果该员工号不存在则返回上一层界面。
3
3.2工作负荷
(1)员工每个工种基本工资的设定。
(2)企业工资报表的生成。支持各种形式的报表,如单个员工工资报表的生成、部门员工工资报表的生成、按照月份统计工资报表的生成等。
(3)管理员可以查询、更改任何员工的工资。 (4)员工可以凭工号查询员工工资。 (5)工资管理系统的使用帮助。
(6)现有工资管理系统需要根据公司的经营状况以及人员变动对工作量进行分配。当公司调入新职员时,需要对系统进行职员更新即插入操作等以及随时对数据库进行不断的更新。任务繁重,工作量大。
3.3 软件设计环境
C 语言
二 需求分析 1.1 数据流图
学校内部工资管理系统顶层DFD图各系部人事处职工出勤报表学校内部工资管理系统职工出勤信息职工基本信息职工工资单职工工资信息银行
4
标题学校内部工资管理系统1层DFD图职工工资信息表银行职工工资信息P2职工工资单职工工资管理子系统各系部职工出、缺勤信息职工基本信息职工基本信息表P1职工基本信息管理子系统P3职工出勤管理子系统职工出、缺勤报表人事职工出、缺勤信息处 标题学校内部工资管理系统2层DFD图(1)银行职工工资信息息信资工准标工职人事处P2.1出勤工资、奖金扣款清单P2.2职工工资信息生成财务处职工信息整理发送职工工资条职工基本信息表各系部
5
学校内部工资管理系统2层DFD(2)P3.1建立职工出缺勤信息各系部职工出缺勤信息职工基本信息表P3.2制作职工出缺勤信息统计表职工出缺勤信息职工出缺勤信息表
1.2数据字典
数据字典是软件分析过程中对数据的描述,是数据流图的必不可少的辅助资料。数据字典的定义和数据流图是同时进行的,每当完成一张数据流图时,都需要对该数据流图中的成分进行完整的定义,数据字典是需求分析阶段一个重要的工具,通过在数据字典中建立一组严密一致的数据定义可以帮助软件分析人员和用户之间交流,同时也有助于软件人员之间的交流,容易达到对数据的统一认识。 (1)外部实体的数据字典
外部实体名称:各部门
简述:提交职工的基本信息和出勤情况
输入数据流:职工工资单
输出数据流:职工基本信息
外部实体名称:人事处
简述:对职工添加,删除进行管理的部门 外部实体名称:银行 输入数据流:职工出勤信息 简述:对职工工资进行转账的部门 输出数据流:职工出勤报表 输入数据流:职工工资信息 6
(2)数据元素的数据字典
数据项名称:员工工号
类型:char
长度:10
说明:学校分发给每个职工的编号
备注:无 数据项名称:姓名 类型:char 长度:8 说明: 员工的个人姓名 备注:无 数据项名称:性别 类型:char 长度:2 说明: 员工的所拥有的性别 备注:无
数据项名称:基本工资
类型:数字
长度:8
说明: 员工的得到的工资
备注:无
数据项名称:上课工资
类型:数字
长度:8
说明: 员工根据上课的课时得到工资
备注:无
7
数据项名称:其他费用
类型:数字
长度:8
说明: 员工在职期间的其他费用
备注:无
(3)数据流的数据字典
名称:职工基本信息 简要说明:职工的个人信息 数据来源:各系部 数据流向: 职工基本信息管理子系统 数据流的组成:工号+姓名+性别
名称:职工工资单 简要说明:职工的工资条 数据来源:职工工资子系统 数据流向:各系部 数据流的组成:工号+姓名+工资单月份+基本工资+岗位津贴+加班工资+生活补贴+业绩奖金+上课工资+养老保险+医疗费用+失业金+公积金+缺勤扣费+房租+水电费+代扣所得税+应发工资+扣款总额+实发工资
名称:基本出勤信息 简要说明:每个月20号把出勤信息上报人事处 数据来源:人事处 数据流向:职工出勤子系统 数据流的组成:工号+姓名+出勤信息
8
名称:职工工资信息 简要说明:所有职工的工资信息集合 数据来源:职工工资子系统 数据流向:银行 数据流的组成:工号+姓名+实发工资
(4)处理过程的数据字典
名称:职工工资信息生成 说明:人事处将根据出勤情况和职工的基本信息生成的职工工资信息 输入:人事处 输出:生成职工工资信息表 处理:人事处根据出勤情况和所得奖金以及扣款情况以及职工个人的基本信息生成一个基本工资表
名称:财务处处理职工信息整理发送 说明:财务处根据职工工资基本信息整理后送往各系部和银行 输入:职工工资基本信息表 输出:将职工工资信息生成工资表和工资条送往银行和各系部 处理:财务处通过工资表和职工基本信息表整理生成工资条和工资表送往各系部和银行.
(5)数据存储的数据字典
数据存储名称:职工工资信息表 说明:按职工工号给职工发的基本工资 数据存储组成:工号+姓名+工资单月份+基本工资+岗位津贴+加班工资+生活补贴+业绩奖金+上课工资+养老保险+医疗费用+失业金+公积金+缺勤扣费+房租+水电费+代扣所得税+应发工资+扣款总额+实发工资 关键字:工号 有关的数据流:无
9
数据存储名称:职工基本信息表 说明:职工的个人信息 数据存储组成:工号+姓名+性别+密码 关键字:工号 有关的数据流:无 2输入输出要求
数据描述
2.1用户登录信息表
字段 1 2 3 4 5 6 7 2.2 字段 1 2 3 4 5 6 7 8
字段名 员工ID 部门ID 基本工资 奖金比率 罚金比率 扣税总额 工资总额 统计日期 数据类型 字符 字符 整型 浮点型 浮点型 浮点型 浮点型 日期 宽度(字节) 15 20 8 8 8 8 8 字段名 用户ID 用户密码 用户身份 所属部门 职务 身份证号 银行帐号 数据类型 字符 字符 字符 字符 字符 字符 字符 宽度(字节) 15 20 10 20 20 18 20 工资计算标准表
2.3 出勤汇总表
10
字段 1 2 3 4 5
字段名 员工ID 应出勤时间 实际出勤时间 请假时间 无故缺勤时间 数据类型 字符 整型 整型 整型 整型 宽度 15字节 4字节 4字节 4字节 4字节 2.4. 银行发放工资表
字段 1 2 3 字段名 银行名 工资表单号 发放时间 数据类型 字符 字符 日期 宽度 30字节 30字节
3需求规定 3.1对功能的规定
(1) 用户的登录及退出:用户登录后,可以查询当月及年度的工资信息并打印工资条,
用户可以修改用户密码,完成一切任务后用、用户可以安全退出 (2)系统用户管理:实现对用户数据的修改,删除等相关操作。
(3)用户信息管理:实现对用户信息的添加、修改及删除等相关操作。
(4)工资标准设立:根据职工的职务、职称等其他信息设定职工的工资的标准。
三 概要设计 1.1 结构
11
学校内部工资管理系统 用户登录用户退出 用户信息管理 工资标准设立 职务工资标准设立 用户数据删除及输入 打印工资条 修改密码 用户数据添加及插入 职称工资标准设立 查询工资 用户数据查找及 其他工资标准设立 1.2功能需求与模块的关系
(1)用户需要登录系统才能进行工资信息的查询及打印,并修改用户密码
(2)系统管理员需要对职工信息进行添加、修改、删除等操作就需要用到用户信息管理模块。
(3)工资标准要根据职称,职位等的不同进行设定。就需要用到工资标准设立模块
2.1外部接口
运行本软件要求处理器在奔腾III以上、内存在256MB以上的计算机。能够支持、Windows 2000、Windows XP及windows 7的运行环境
2.2内部接口
本系统内部元素之间主要通过数据库接口完成相应功能。 登录模块:完成对用户身份的验证。
初始化模块:在身份验证后,系统调用初始化操作,执行完毕后进入消息循环状态。 查找模块:由相应消息驱动,完成对信息进行查看功能。 删除模块:具有此权限的用户完成对信息删除功能。 打印模块:实现用户从系统打印功能。 退出模块:实现用户从系统退出功
四 系统实现
12
1.1系统登录界面
系统用户在该界面输入正确的工号、密码和验证码即可登录该系统。登录模块会自动的判断用户输入的工号的权限。如果输入的工号是admin,则系统默认转向管理员主界面;如果输入的是其他的工号,系统会检查是否有该用户的工资信息,若有,则进入该用户的工资查询界面,若没有,则提示“没有您的工资单”。
1.2系统管理员管理主界面及工资汇总界面
系统管理员(即人事处管理员)通过该页面可以连接到其他的页面(其他页面包括:用户管理页面、添加工资单页面、查询教职工工资、修改及删除教职工工资等),该页面分页汇总显示了所有教职工的工资详细信息,管理员可以对各教职工的工资信息进行添加、修改和删除。
1.3教职工查询工资主界面
教职工用户通过输入正确的工号、密码和验证码即可登录自己的工资查询主页面,在此页面中,教职工可以查询自己近几个月的工资详细信息,也可以对自己的登录密码进行修改。同时,能打印出自己需要的工资单。
1.4用户管理界面
该页面由管理员来操作,通过系统管理员主页面可以访问该页面。主要是对教职工的个人信息进行汇总、添加、修改和删除等操作。
1.5添加工资单界面
该页面由管理员来操作,通过系统管理员主页面可以访问该页面。主要是对教职工的工资信息进行添加,添加时可以选择所添加工资信息的月份。
1.6密码修改界面
该页面主要实现的是用户密码的修改。不同的用户登录系统后,均能对自己的登录密码进行修改。
1.7工资单打印界面
该页面主要实现的是工资单的打印。系统管理员登录后能打印所有教职工的工资单,教职工登录后仅能打印本人的工资单。
13
五 课程设计总结
六 程序代码
#include #include #define TITLE \"\\n 月份 工号 姓名 #define \" %2d %4ld %-10s %6.1f %6.1f >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(); void output(); void save(PAY *head); PAY *open(); PAY *insert(); void search(); PAY *del(); PAY *revise(); 14 应发工资 各种折扣 实发工资\\n\" DATA %6.1f\\n\ /*菜单*/void main(void) { short sel; do { menu(); scanf(\"%d\ switch(sel) { case 1: head=input(); //用户数据添加模块 break; case 2: head=insert(); //用户数据插入模块 break; case 3: head=revise(); //用户数据修改模块 break; case 4: head=del(); //用户数据删除模块 break; case 5: search(); //用户数据查找模块 break; case 6: output(); //用户数据输出模块 break; case 0: break; } }while(sel!=0); } void menu() { printf(\"\\n\\n\\n\\n\\n\\n\\n\"); printf(\"\\\\ *主菜单选项*\\n\\n\"); printf(\"\\\\1.创建职工工资信息\\n\"); printf(\"\\\\2.添加职工工资信息\\n\"); printf(\"\\\\3.修改职工工资信息\\n\"); printf(\"\\\\4.删除职工工资信息\\n\"); 15 printf(\"\\\\5.查找职工工资信息\\n\"); printf(\"\\\\6.信息列表分类\\n\"); printf(\"\\\\7.保存 信息\\n\"); printf(\"\\\\0.退 出\\n\"); printf(\"\\n\\n\\n\\n\\n\\n\\n\\n\"); } /*用户数据添加模块*/ PAY *input() { short n=1; p1=(PAY*)malloc(sizeof(PAY)); if(p1==NULL) { printf(\"内存不足,无法创建链表!\"); getch(); } printf(\"\\n请输入第%d位职工的信息(以工号为0结束):\\n\ printf(\" 工号:\"); scanf(\"%d\ if(p1->num==0) { printf(\"按任意键返回!\"); getch(); free(p1); return 0; } getchar(); printf(\" 姓名:\"); gets(p1->name); printf(\" 工资月份:\"); scanf(\"%d\ printf(\" 基本工资,级别工资,职务津贴,工龄津贴,其他津贴,绩效奖励:\\n\"); scanf(\"%f,%f,%f,%f,%f,%f\ printf(\" 房租扣款,公积金,水电费,其它扣款:\\n\"); scanf(\"%f,%f,%f,%f\ 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 16 p2->next=p1; n++; p2=p1; p1=(PAY*)malloc(sizeof(PAY)); if(p1==NULL) { printf(\"内存不足,无法创建链表!\"); getch(); } printf(\"请输入第%d位职工的信息(以工号为0结束):\\n\ printf(\" 工号:\"); scanf(\"%d\ getchar(); if(p1->num==0) { p1=NULL; break; } printf(\" 姓名:\"); gets(p1->name); printf(\" 工资月份:\"); scanf(\"%d\ printf(\" 基本工资,级别工资,职务津贴,工龄津贴,其他津贴,绩效奖励:\\n\" ); scanf(\"%f,%f,%f,%f,%f,%f\ printf(\" 房租扣款,公积金,水电费,其它扣款:\\n\"); scanf(\"%f,%f,%f,%f\ 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 { 17 do { printf(\"\\n\\n请选择您的列表方式:\\n\"); printf(\"\\1.全部清单\\n\"); printf(\"\\2.按月输出\\n\"); printf(\"\\3.按工资段输出\\n\"); printf(\"\\0.返回\\n\"); scanf(\"%d\ }while(sel!=1&&sel!=2&&sel!=3&&sel!=0); head=open(); if(head==NULL) return; else switch(sel) { case 1: printf(\"\\n\\\ ******全部清单******\\n\"); printf(TITLE); p1=head; do { printf(DATA); p1=p1->next; }while(p1!=NULL); break; case 2: flag=0; printf(\"输入要查的月份:\"); scanf(\"%d\ printf(\"\\n\\\******第%d月工资清单******\\n\ printf(TITLE); p1=head; do { if(p1->month==month) { printf(DATA); p1=p1->next; flag=1; } else p1=p1->next; }while(p1!=NULL); if(flag==0) 18 printf(\"没有该月清单\\n\"); break; case 3: flag=0; printf(\"输入最低工资:\"); scanf(\"%f\ printf(\"输入最高工资:\"); scanf(\"%f\ printf(\"\\n\\ ******%5.1f到%5.1f工资的名单******\\n\ printf(TITLE); p1=head; do { if(p1->actual_pay>min&&p1->actual_pay p1=p1->next; }while(p1!=NULL); if(flag==0) printf(\"没有该工资段的职工\\n\"); break; case 0: break; } }while(sel!=0); } /*打开文件*/ PAY *open() { short n=1,read; fp=fopen(\"pay.txt\ if(fp==NULL) { printf(\"无法打开档案文件!\"); getch(); return NULL; } if((p1=p2=(PAY*)malloc(sizeof(PAY)))==NULL) { 19 printf(\"内存不足!\"); getch(); return NULL; } read=fread(p1,sizeof(PAY),1,fp); if(!read) { printf(\"文件读取出错!1\"); getch(); return NULL; } if(p1->next==NULL) 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\ getchar(); printf(\" 姓名:\"); gets(p3->name); printf(\" 工资月份:\"); scanf(\"%d\ printf(\" 基本工资,级别工资,职务津贴,工龄津贴,其他津贴,绩效奖励 :\\n\"); scanf(\"%f,%f,%f,%f,%f,%f\ printf(\" 房租扣款,公积金,水电费,其它扣款:\\n\"); scanf(\"%f,%f,%f,%f\ 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(); 21 return head; } /*用户数据查找模块*/ void search() { short sel; long num; char name[20],choose; head=open(); if(head==NULL) return; else do { do { printf(\"\\n选择查找方式:\\n\"); printf(\"\\1.按工号查找\\n\"); printf(\"\\2.按姓名查找\\n\"); scanf(\"%d\ getchar(); }while(sel!=1&&sel!=2); switch(sel) { case 1: printf(\"输入要查的工号:\"); scanf(\"%ld\ 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); } 22 else 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(\"\\1.按工号删除\\n\"); printf(\"\\2.按姓名删除\\n\"); scanf(\"%d\ getchar(); }while(sel!=1&&sel!=2); switch(sel) { case 1: printf(\"输入要删除的工号:\"); scanf(\"%ld\ break; case 2: printf(\"输入要删除的姓名:\"); gets(name); break; } p1=head; if((p1->num==num)||strcmp(p1->name,name)==0) { head=p1->next; 23 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\"); } 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(\"\\1.按工号查找\\n\"); printf(\"\\2.按姓名查找\\n\"); scanf(\"%d\ 24 getchar(); }while(sel!=1&&sel!=2); switch(sel) { case 1: printf(\"输入要查的工号:\"); scanf(\"%ld\ 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\ getchar(); printf(\" 姓名:\"); gets(p1->name); printf(\" 工资月份:\"); scanf(\"%d\ printf(\" 基本工资,级别工资,职务津贴,工龄津贴,其他津贴,绩效奖励:\\n\"); scanf(\"%f,%f,%f,%f,%f,%f\ printf(\" 房租扣款,公积金,水电费,其它扣款:\\n\"); scanf(\"%f,%f,%f,%f\ 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(\"任意键返回,并存盘……\"); 25 getch(); return head; } 软件的运行结果如下: 输入一组数据对一项 创建职工工资信息进行测试。结果如下: 26 我们对其他部分也进行了测试,该程序可运行。 七 参考文献 1. 《软件工程导论》,张海藩,清华大学出版社; 2 《实用软件工程》,郑人杰等,清华大学出版社; 3.《lomboz Eclipse使用教程》林峰等,东南大学出版社; 4.《软件工程实验指导书》 安徽工程大学 5. 《软件工程导论》 陈明等, 机械工业出版社; 27 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务