C++工资管理系统源代码

合集下载

工资管理系统数据流程图

工资管理系统数据流程图

1. 工资管理系统的数据流程图,如图:2. 主要数据字典 1) 数据项的定义数据项数据项名称类型及宽度简述取值范围编号 I1 标示其他部门提交的职工考勤信息的年考勤日期 Char ( 10) 月工资日期 Char10) 标示职工工资的年月 I2 职工编码 Char10) 唯一用来标示职工的编码 I3 部门名称 Char(20) 使用此系统单位内部子部分 I4 基本工资 decimal(7,2) I5 各部门内的员工固定工资,即部门岗位工资。

2)数据存储的描述数据数据存简述数据存储组成相关联的存储储名称处理编号 S1 变动工记录职工变动工资的工资日期 + 职工编码 + 加班费 + 奖金 + 水P2 、 p4 资表详细信息电费 + 保险费 + 病假扣款 + 事假扣款 + 旷工扣款 + 其他扣款 + 个人所得税 S2 基本工记录职工固定工资的工资日期 + 职工编码 + 基本工资 + 工 P4 、 p5 资表详细信息龄工资 + 岗位津贴 + 固定补贴 S3 工资计记录职工工资的详细工资日期 + 职工编码 + 职工姓名 + 个 P4 、 p5 、算表信息人账号 + 基本工资 + 工龄工资 + 岗位p6 、 p7 、津贴 + 固定补贴 + 变动津贴 + 加班费 + p8 、 p9 奖金 + 应发工资 + 水电费 + 保险费 + 病假扣款 + 事假扣款 + 旷工扣款 + 其他扣款 + 个人所得税 + 扣款合计 + 实发工资 S4 福利费记录职工福利费分配日期 + 职工编码 + 部门编码 + 对应科目编码 P8 、 p10 计提分的详细信息 + 金额配表 S5 个人所记录职工个人所得税职工编码 + 职工姓名 + 所得期间 + 所得项目 P9 、 p10 得税申情况 + 收入额合计 + 费用额 + 应纳税所得额 + 税报表率 + 速算扣除数 + 扣缴所得税额 S6 工资费描述工资费用的分摊日期 + 职工编码 + 部门编码 + 对应科目编码 P7 、 p10 用分配(来源) + 金额表S8 职员信职员基本信息职工编码 + 职工姓名 + 性别 + 人员类别 + P3 、 E3息表部门编码 + 部门名称 + 岗位编码 + 岗位名称 + 职称 + 工龄 + 个人账号 + 联系电话 S9 工资计设置职工工资项目金基本工资计算标准 + 变动工资计算标准 E3 、 P2 算标准额标准表 S10 考勤表记录职工考勤信息情考勤日期 + 职工编码 + 加班天数 + 病假天数 P1 、 P2 况 + 旷工天数 + 事假天数; 3)数据流的描述数据数据流简述数据流数据流数据流组成数据高峰流编名称来源去向流量流量号D1 考勤记输入的企业所有E1 P1 考勤日期 + 职工编码 + 1 次 1 次录职工的考勤信息加班天数 + 病假天数 + / 月 / 月旷工天数 + 事假天数; D1 人事基描述人事基本信E2 P3 职工编码 + 职工姓名 + 1 次 1 次本信息息性别 + 人员类别 + 部门/ 月 / 月编码 + 部门名称 + 岗位编码 + 岗位名称 + 职称 + 工龄 + 个人账号 + 联系电话 4) 处理的描述处理处理逻输入的数据流处理逻辑的描述输出的数处理逻辑辑名称据流频率编号 P1 输入考D1 其他部门汇总的由其他部门的负责人每个月按期输入S11 考勤1 次勤信息考勤信息企业所有职工的考勤信息表 / 月 P2 编制变S9 工资计算标准财务处根据其他部门的负责人输入的S1 变动1 次动工资表 ;s11 考勤表职工考勤等考勤信息,以及工资计算标工资表 / 月表准表中设置的金额计算出企业每个职工的加班费、病假扣款、事假扣款、旷工扣款等金额,并编制变动工资表。

工资管理信息系统设计

工资管理信息系统设计

工资管理信息系统设计GL990525 彭卫兵一、可行性分析1.技术可行性:工资管理是一项琐碎、复杂而又十分细致的工作,不能发生差错,由于考虑到手工计算十分麻烦,又因为工资的发放必须按照规定的时间严格地进行;并且工资的发放具有重复性、规律性、时间性的特点,使工资的计算和发放采用计算机成为可能。

2.经济可行性:在手工的方式下,工资发放的反复抄写、计算、核对,不仅大量地花费时间,还很容易发生错误。

在计算机方式下,工资的发放与计算由计算机进行,大大提高了工资管理的时间性与准确性,工资管理的效率得到很大的提高。

计算机的核算具有相当的准确性,有利于企业及时地处理内部的成本、财务问题,提高本企业的劳动生产率和管理效率。

3.社会可行性:本次工资管理信息系统设计得到了领导和广大员工的支持,投入资金贰万元,为公司创建一个有效的工资管理系统。

二、数据分析本次工资管理信息系统设计的数据分析包括数据流程图和数据字典。

数据流程图用来描述本系统的处理过程和数据流向。

数据字典则用来描述系统中的元素。

二者都能为系统提供有用的信息。

三、功能模块设计本次工资管理信息系统设计的功能模块包括初始处理、工资核算、信息查询、统计分析、报表输出、系统维护、帮助、退出八项。

具体功能模块结构如下图:代码设计对管理信息系统是一个非常有利的事情,设计出一个好的代码方案对于系统内的许多机器处理变得十分的方便,不仅能提高数据维护、查询统计的及时性与准确性,还能把现阶段的一些计算机很难处理的工作变得简单的处理。

根据代码设计的原则,进行本次代码设计。

具体内容如下:1.性别:其中1代表性别,001表示男002表示女1001 男1002 女2.民族:其中2代表民族,001表示汉族,002表示少数民族2001 汉族2002少数民族3.文化程度:3表示文化程度,根据文化程度的高低依次排列3001文盲3002 小学3003初中3004中专3005 高中3006大专3007 大本3008硕士3009博士3010博士后4.技术职务:其中4表示技术职务,根据职务高低依次排列。

数据库工资管理系统报告和代码大全

数据库工资管理系统报告和代码大全

数据库原理及应用课程设计报告题目:工资管理系统所在学院:信息工程学院班级:学号:姓名:指导教师:2014年1月2日目录一、概述二、需求分析三、概念设计四、逻辑设计五、系统实现六、小结一、概述在工资管理中,需要从公司管理方式以及实际情况中提取相关信息,以反映工资管理情况。

传统的手工操作方式,易发生数据丢失,统计错误,劳动强度高,且速度慢。

使用计算机可以高速,快捷地完成以上工作。

避免重复劳动,规范工资管理行为,从而提高了管理效率和水平。

让人们的效率大大提高.不难想象,正是资讯的迅速发展使得人们从过去繁复的手工劳作中得以解脱,从而使这种服务在现在才可能迅速普及。

同时,编写一套完整的工资管理系统的任务就显得尤为重要。

本课程设计共分为四大模块:1.系统数据初始化2.工基本信息数据的输入、修改、删除;3.员工个人信息及工资表的查询;4,员工工资的计算;二、需求分析本系统主要用于员工基本信息的管理,对员工以及其他信息的添加、修改、删除、查询等基本操作。

对于数据库的保护有数据备份和数据恢复的功能。

针对这些要求,设计本月工资信息管理系统。

该系统主要包括职工信息、工资级别和工资金额、公司福利表等。

⒈员工基本状况包括员工号、员工姓名、性别、所在部门、工资级别、工资等级等。

2.工资级别和工资金额包括工资等级、工资额。

3.企业部门及工作岗位信息包括部门名称、工作岗位名称、工作岗位工资等。

4.工龄和工资金额包括工龄及对应工资额。

5.公司福利表包括福利名称、福利值。

本系统概念设计思想:1.对公司软硬件调查,从实际环境出发,以便充分利用公司现在资源,提高系统开发水平和应用效果。

图1.1 系统功能模块图图2.6信息查询及管理的流程图三、概念设计分析前面的系统功能要求,需要一个表来存储和管理员工信息,使系统能够接受员工原始的各项数据,以实现数据录入、查询或统计员工信息等功能。

员工是本系统的第一个实体。

为了能实现查询和统计部门内员工情况等功能,必须有一个表来存储和管理所有部门的信息。

工资管理系统数据流程图

工资管理系统数据流程图
使用此系统单位内部子部分
I5
基本工资
decimal(7,2)
各部门内的员工固定工资,即部门岗位工资。
2)数据存储的描述
数据存储编号
数据存储名称
简述
数据存储组成
相关联的处理
S1
变动工资表
记录职工变动工资的详细信息
工资日期 + 职工编码 + 加班费 + 奖金 + 水电费 + 保险费 + 病假扣款 + 事假扣款 + 旷工扣款 + 其他扣款 + 个人所得税
奖金 + 应发工资 + 水电费 + 保险费 + 病
假扣款 + 事假扣款 + 旷工扣款 + 其他
扣款 + 个人所得税 + 扣款合计 + 实发
工资
P4 、 p5 、 p6 、 p7 、 p8 、 p9
S4
福利费计提分配表
记录职工福利费分配的详细信息
日期 + 职工编码 + 部门编码 + 对应科目编码 + 金额
1 次 / 月
1 次 / 月
D1
人事基本信息
描述人事基本信息
E2
P3
职工编码 + 职工姓名 + 性别 + 人员类别 + 部门编码 + 部门名称 + 岗位编码 + 岗位名称 + 职称 + 工龄 + 个人账号 + 联系电话
1 次 / 月
1 次 / 月
4) 处理的描述
处理逻辑编号
处理逻辑名称
输入的数据流
处理逻辑的描述
1 次 / 月

高校工资管理系统设计源代码

高校工资管理系统设计源代码

#include〈iostream〉#include<fstream〉#include<iomanip>using namespace std;class person //基类{public:bool mark; //存在标记char name[20];//职工姓名int num; //职工编号double basePay;//基本工资person(bool m,char nm[],int n,double b):mark(m),num(n),basePay(b){strcpy(name,nm);}};class teacher:virtual public person //教师类{public:double classPay;//课时费teacher(bool m,char nm[],int n,double b,double c):person(m,nm,n,b),classPay(c){}void show(){cout〈〈setw(15)<<”职工类型"〈〈setw(10)〈〈"职工编号”〈<setw(10)<〈”职工姓名"〈<setw(10)〈<"基本功资”〈〈setw(10)〈<"课时费"〈〈setw(10)<<”总工资”<<endl;cout〈〈setw(15)〈<”教师"<〈setw(10)〈〈num<〈setw(10)<<name<〈setw(10)〈<basePay〈<setw(10)〈〈classPay<〈setw(10)<<classPay+basePay〈〈endl;}};class lab:virtual public person //实验员类{public:double labPay; //实验室补助lab(bool m,char nm[],int n,double b,double j):person(m,nm,n,b),labPay(j){}void show(){cout<〈setw(15)〈<"职工类型”〈<setw(10)<<"职工编号"<〈setw(10)〈〈"职工姓名”〈〈setw(10)〈<”基本功资”〈<setw(10)〈<”实验补贴”<〈setw(10)〈〈"总工资”〈<endl;cout<〈setw(15)〈〈"实验员”〈〈setw(10)<<num<<setw(10)<<name〈<setw(10)〈<basePay〈<setw(10)<<labPay<〈setw(10)〈〈labPay+basePay〈〈endl;}};class admin:virtual public person //行政人员类{public:double adminPay;//行政补贴admin(bool m,char nm[],int n,double b,double k):person(m,nm,n,b),adminPay(k){}void show(){cout〈<setw(15)<〈"职工类型"<<setw(10)<〈”职工编号"<<setw(10)〈〈"职工姓名”〈〈setw(10)<〈”基本功资"〈<setw(10)〈<"行政补贴"<〈setw(10)〈〈”总工资”〈<endl;cout<<setw(15)<〈"行政人员"<<setw(10)<<num〈<setw(10)<<name〈〈setw(10)<<basePay〈<setw(10)〈〈adminPay<<setw(10)〈<adminPay+basePay〈<endl;}};void add() //添加数据函数{ifstream ifile("E:\\data。

会计电算化复习题含答案

会计电算化复习题含答案

会计电算化复习题含答案一、单选题(共50题,每题1分,共50分)1、某软盘已染病毒且杀毒软件无能为力,为了防止传染,正确的措施是()。

A、在该软盘缺口处关上写保护B、删除软盘上的所有程序以删除病毒C、将软盘放一段时间后再用D、将该软盘重新格式化正确答案:D2、凭证输入时,会计科目代码应输入()代码。

A、三级科目B、一级科目C、二级科目D、最明细级科目正确答案:D3、扫描仪是()输入的主要设备。

A、图像B、音乐C、文字D、数据正确答案:A4、有些报表系统将屏幕报表分为两种状态,即()。

A、格式状态和数据状态B、固定状态和变动状态C、常数状态和变数状态D、字符状态和图形状态正确答案:A5、在EXCEL中,在单元格中输入数据时,输入的第一个符号是OA、=B、+C、一D、$正确答案:A6. WWW主要由()组成,其中前者存储网页形式的信息资源,后者提供给用户使用。

A、WeB、服务器和WeB,浏览器B、WeB、服务器和WeB、工作站C、文件服务器和用户工作站D、服务器和客户机正确答案:A7、会计信息系统软件的财务部分的各个子系统中以()子系统为核心。

A^报表,B、资金管理C、成本核算D、账务处理正确答案:D8、银行对账是()最基本的工作之一。

A、记账员B、凭证输入员C、出纳D、会计主管正确答案:C9、为了实现自动转账,用户在系统初始化时要执行转账凭证()功能。

A、定义B、审核C、生成D^录入正确答案:A10、在凭证输入过程中,下列数据不允许直接从键盘输入的是()。

A、附件张数B、借贷金额C、科目名称D、科目代码正确答案:C11、国外把利用电子数据系统的会计,称为电子数据处理会计,简称()会计。

A、DSSB、EDPC、ERPD、MIS正确答案:B12、下列()不属于固定资产折旧文件应包括的内容。

A、折旧额B、部门名称C、费用名称D、固定资产原值正确答案:D13、在账务系统中下列设置可以不在初始化时完成的是()oA、自动转账凭证设置B、会计科目设置C、结算方式设置D、凭证类型设置正确答案:A14、EXCEL的每张工作表包含()A、256*16384个单元格B、256*16385个单元格C、256*65536个单元格D、256*65535个单元格正确答案:C15、微型机自问世以来已经历了五个发展年代,微机年代一般按()来划分的。

工资管理系统源代码

工资管理系统源代码

#include <stdio.h>#include <string.h>#include <ctype.h>#include <stdlib.h>#include <windows.h>#define MONTH_NUM 5 /* 最多的月份*/struct worker{int number; /* 每个工人的工号*/char name[15]; /* 每个工人的姓名*/int salary[MONTH_NUM]; /* 每个工人M月的工资*/ int sum; /* 每个工人的总工资*/ float average; /* 每个工人的平均工资*/ struct worker *next; //下一个节点的地址};typedef struct worker STU;char Menu(void);int Ascending(int a, int b);int Descending(int a, int b);void IntSwap(int *pt1, int *pt2);void CharSwap(char *pt1, char *pt2);void FloatSwap(float *pt1, float *pt2);STU *AppendNode(STU *head, const int m);STU *DeleteNode(STU *head, int nodeNum);STU *ModifyNode(STU *head, int nodeNum, const int m); STU *SearchNode(STU *head, int nodeNum);STU *Appendsalary(STU *head, const int m);void Totalsalary(STU *head, const int m);void Printsalary(STU *head, const int m);STU *Deletesalary(STU *head, const int m);void Modifysalary(STU *head, const int m);void Sortsalary(STU *head, const int m, int (*compare)(int a, int b));void Searchsalary(STU *head, const int m);void DeleteMemory(STU *head);void numberSwap(STU *head);main(){char ch,b;int m,a;STU *head = NULL;printf("\n\n\n\n\n\n\n\n\n");printf("``╭╮╭╮╭╮\n");printf("``│││││└╮\n");printf("╭┴┴———————┴┴╮~└—╯\n");printf("││╭—————╮\n");printf("│││哈│\n");printf("│●●│╭╮│喽! │\n");printf("│○╰┬┬┬╯○│o╰╯╰—————╯\n");printf("│╰—╯│\n");printf("╰——┬o———o┬——╯\n");printf(" ╭╮╭╮\n");printf(" ╰┴————┴╯\n");Sleep(3000);system("cls");printf("\n\n\n\n\n\n\n\n\n\n\n ≈~☆输入要记录的月份个数(m<10)☆~~`≈: "); scanf("%d", &m);system("cls");while (1){ch = Menu();switch (ch){case'1':head = Appendsalary(head, m);Totalsalary(head, m);break;case'2':Modifysalary(head, m);Totalsalary(head, m);printf("\nAfter modified\n");Printsalary(head, m);Sleep(1000);break;case'3':head = Deletesalary(head, m);printf("\nAfter deleted\n");Printsalary(head, m);break;case'4':do{Searchsalary(head, m);printf("\(≧▽≦)/ 是否要继续查询?Y or N:");scanf(" %c",&b);}while(b=='y'||b=='Y');break;case'5':Printsalary(head, m);printf("\(≧▽≦)/ 是否要选择排列方式?Y or N:");scanf(" %c",&b);while(b=='y'||b=='Y'){printf("你想降序排列还是升序排列?(1降序2升序):");scanf(" %d",&a);if(a==1){Sortsalary(head, m, Descending);printf("\nsorted in descending order by sum\n");Printsalary(head, m);}else{Sortsalary(head, m, Ascending);printf("\nsorted in ascending order by sum\n");Printsalary(head, m);}printf("O(∩_∩)O 是否继续选择排列方式?Y or N:");scanf(" %c",&b);}break;case'0':system("cls");printf("┴┬┴┬/ ̄\_/ ̄\\n");printf("┬┴┬┴▏▏▔▔▔▔\\n");printf("┴┬┴/\/﹨\n");printf("┬┴∕/)╭—————╮\n"); printf("┴┬▏●▏│再│\n"); printf("┬┴▏▔█◤╭╮│见! │\n"); printf("┴◢██◣\__/o╰╯╰—————╯\n"); printf("┬█████◣/\n");printf("┴█████████████◣\n");printf("◢██████████████▆▄\n");printf("◢██████████████▆▄\n");printf("█◤◢██◣◥█████████◤\\n");printf("◥◢████████████◤\\n");printf("┴███████████◤﹨\n");printf("┬││█████◤▏\n");printf("┴││)\n");printf("┬∕∕/▔▔▔\∕\n");printf("*∕___/﹨∕\/\\n");printf("┬┴┬┴┬┴\\_ ﹨/﹨\n");printf("┴┬┴┬┴┬┴\___\﹨/▔\﹨\n");exit(0);DeleteMemory(head);printf("End of program!");break;default:printf("Input error!");break;}}}char Menu(void)//主菜单{char ch;system("cls");printf("\n\n\n\n ━━●●━━━━━━━━━━━管理工人的工资━━━━━━...........(╯3╰)\n");printf(" 1.添加记录\n");printf(" 2.更新记录\n");printf(" 3.删除记录\n");printf(" 4.查询记录\n");printf(" 5.统计分析记录\n");printf(" 0.退出\n");printf(" ━━━━━━━━━━☆━━━━━━━━━━━━━━━━━☆━━━━━━━━━━\n");printf("` `.~ ☆~~`≈~☆☆~~`≈~☆☆~~`≈~☆.` `.~\n");printf("\n请输入你的选择:");scanf(" %c", &ch); /*在%c前面加一个空格,将存于缓冲区中的回车符读入*/system("cls");return ch;}STU *Appendsalary(STU *head, const int m)//添加新记录{int i = 0;char c;do{head = AppendNode(head, m); /*向链表末尾添加一个节点*/printf("\n O(∩_∩)O 你想再添加一个新的记录吗(Y/N)?");scanf(" %c",&c); /*%c前面有一个空格*/i++;}while (c=='Y' || c=='y');printf("%d new nodes have been apended!\n", i);return head;}STU *Deletesalary(STU *head, const int m)//删除记录{int i = 0, nodeNum;char c;do{printf("\n ⊙﹏⊙请输入你想删除的记录编号:");scanf("%d", &nodeNum);head = DeleteNode(head, nodeNum); /*删除工号为nodeNum的工人信息*/ Printsalary(head, m); /*显示当前链表中的各节点信息*/printf("Do you want to delete a node(Y/N)?");scanf(" %c",&c); /*%c前面有一个空格*/i++;}while (c=='Y' || c=='y');printf("%d nodes have been deleted!\n", i);return head;}void Modifysalary(STU *head, const int m)//修改记录{int i = 0, nodeNum;char c;do{printf("\n~~~^_^~~~ 请输入你想修改的记录编号:");scanf("%d", &nodeNum);head = ModifyNode(head, nodeNum, m); /*修改工号为nodeNum的节点*/ printf("Do you want to modify a node(Y/N)?");scanf(" %c",&c); /*%c前面有一个空格*/ i++;}while (c=='Y' || c=='y');printf("%d nodes have been modified!\n", i);}void Totalsalary(STU *head, const int m){STU *p = head;int i;while (p != NULL) /*若不是表尾,则循环*/{p->sum = 0;for (i=0; i<m; i++){p->sum += p->salary[i];}p->average = (float)p->sum / m;p = p->next; /*让p指向下一个节点*/}}void Sortsalary(STU *head, const int m, int (*compare)(int a, int b)){STU *pt;int flag = 0, i;do{flag = 0 ;pt = head;/*若后一个节点的总工资比前一个节点的总工资高,则交换两个节点中的数据注意只交换节点数据,而节点顺序不变,即节点next指针内容不进行交换*/ while (pt->next != NULL){if ((*compare)(pt->next->sum, pt->sum)){IntSwap(&pt->number, &pt->next->number);CharSwap(pt->name, pt->next->name);for (i=0; i<m; i++){IntSwap(&pt->salary[i], &pt->next->salary[i]);}IntSwap(&pt->sum, &pt->next->sum);FloatSwap(&pt->average, &pt->next->average);flag = 1;}pt = pt->next;}}while(flag);}/*交换两个整型数*/void IntSwap(int *pt1, int *pt2){int temp;temp = *pt1;*pt1 = *pt2;*pt2 = temp;}/*交换两个实型数*/void FloatSwap(float *pt1, float *pt2){float temp;temp = *pt1;*pt1 = *pt2;*pt2 = temp;}/*交换两个字符串*/void CharSwap(char *pt1, char *pt2){char temp[15];strcpy(temp, pt1);strcpy(pt1, pt2);strcpy(pt2, temp);}/*决定数据是否按升序排序,a<b为真,则按升序排序*/ int Ascending(int a, int b){return a < b;}/* 决定数据是否按降序排序,a>b为真,则按降序排序*/ int Descending(int a, int b){return a > b;}void Searchsalary(STU *head, const int m)//查询记录{int number, i,j,k=0,x,t=0;char str[100] = {'\0'}, temp[3];STU *findNode;printf("\n 请输入你想查找的记录编号:");scanf("%d", &number);findNode = SearchNode(head, number);if (findNode == NULL){printf("Not found!\n");}else{strcat(str, "工号");for(j=0;j<=strlen(findNode->name);j++)strcat(str," ");strcat(str, "姓名");for (i=1; i<=m; i++){if(findNode->salary[i]/10) t++;for(x=0;x<2*t;x++)strcat(str," ");strcat(str, "工资");itoa(i,temp, 10);strcat(str, temp);}strcat(str," 已发工资总和");if(findNode->sum/10) k++;for(i=0;i<k;i++)strcat(str," ");strcat(str," 个人平均工资");printf("%s", str);printf("\nNo.%3d %-8s ", findNode->number, findNode->name); for (i=0; i<m; i++){printf("%-7d ", findNode->salary[i]);}printf("%9d %9.2f\n", findNode->sum, findNode->average);}}void Printsalary(STU *head, const int m){STU *p = head;char str[100] = {'\0'}, temp[3];int i, j = 1,k,x,n=0,t=0;strcat(str, "工号");for(k=0;k<=strlen(p->name);k++)strcat(str," ");strcat(str, "姓名");for (i=1; i<=m; i++){if(p->salary[i]/10) t++;for(x=0;x<2*t;x++)strcat(str," ");strcat(str, "工资");itoa(i,temp, 10);strcat(str, temp);}strcat(str," 已发工资总和");if(p->sum/10) n++;for(k=0;k<n;k++)strcat(str," ");strcat(str," 个人平均工资");printf("%s", str); /* 打印表头*/while (p != NULL) /*若不是表尾,则循环打印*/{printf("\nNo.%3d %-8s ", p->number, p->name);for (i=0; i<m; i++){printf("%-7d ", p->salary[i]);}printf("%9d %9.2f\n", p->sum, p->average);p = p->next; /*让p指向下一个节点*/j++;}printf("\n");}STU *AppendNode(STU *head, const int m){STU *p = NULL;STU *pr = head;int j;p = (STU *)malloc(sizeof(STU)); /*为新添加的节点申请内存*/if (p == NULL) /*若申请内存失败,则打印错误信息,退出程序*/ {printf("No enough memory to alloc");exit(0);}if (head == NULL) /*若原链表为空表,则将新建节点置为首节点*/ {head = p;}else /*若原链表为非空,则将新建节点添加到表尾*/{/*若未到表尾,则继续移动指针pr,直到pr指向表尾*/while (pr->next != NULL){pr = pr->next;}pr->next = p; /*将新建节点添加到链表的末尾*/}pr = p; /*让pr指向新建节点*/printf("Input node data......");printf("\nInput number:");scanf("%d", &p->number);printf("Input name:");scanf("%s", p->name);for (j=0; j<m; j++){printf("Input salary%d:", j+1);scanf("%d", p->salary+j);}pr->next = NULL; /*将新建节点置为表尾*/return head; /*返回添加节点后的链表的头节点指针*/ }STU *ModifyNode(STU *head, int nodeNum, const int m){int j;STU *newNode;newNode = SearchNode(head, nodeNum);if (newNode == NULL){printf("Not found!\n");}else{printf("Input the new node data:\n");printf("Input name:");scanf("%s", newNode->name);for (j=0; j<m; j++){printf("Input salary%d:", j+1);scanf("%d", newNode->salary+j);}}return head;}STU *DeleteNode(STU *head, int nodeNum){STU *p = head, *pr = head;if (head == NULL) /*链表为空,没有节点,无法删除节点*/{printf("No Linked Table!\n");return(head);}/*若没找到节点nodeNum且未到表尾,则继续找*/while (nodeNum != p->number && p->next != NULL){pr = p;p = p->next;}if (nodeNum == p->number) /*若找到节点nodeNum,则删除该节点*/{if (p == head) /*若待删节点为首节点,则让head指向第2个节点*/{head = p->next;}else /*若待删节点非首节点,则将前一节点指针指向当前节点的下一节点*/ {pr->next = p->next;}free(p); /*释放为已删除节点分配的内存*/}else /*没有找到待删除节点*/{printf("This Node has not been found!\n");}return head; /*返回删除节点后的链表的头节点指针*/}STU *SearchNode(STU *head, int nodeNum){STU *p = head;int j = 1;while (p != NULL) /*若不是表尾,则循环*/{if (p->number == nodeNum) return p;p = p->next; /*让p指向下一个节点*/j++;}return NULL;}void DeleteMemory(STU *head){STU *p = head, *pr = NULL;while (p != NULL) /*若不是表尾,则释放节点占用的内存*/ {pr = p; /*在pr中保存当前节点的指针*/p = p->next; /*让p指向下一个节点*/free(pr); /*释放pr指向的当前节点占用的内存*/}}。

软件工程理论与实践课后习题

软件工程理论与实践课后习题

软件工程理论与实践课后习题1、下列要素中,不属于DFD的是()。

[单选题] *A、加工B、数据流C、数据存储D、联系(正确答案)2、当使用DFD对一个工资系统进行建模时,()可以被认定为外部实体。

[单选题] *A、接收工资单的银行(正确答案)B、工资系统源代码程序C、工资单D、工资数据库的维护3、采用瀑布模型进行系统开发的过程中,每个阶段都会产生不同的文档。

以下关于产生这些文档的描述中,正确的是() [单选题] *A、外部设计评审报告在概要设计阶段产生B、集成测试计划在程序设计阶段产生C、系统计划和需求说明在详细设计阶段产生D、在进行编码的同时,独立的设计单位测试计划(正确答案)4、在UML提供的图中,()用于描述系统与外部系统及用户之间的交互。

[单选题] *A、用例图(正确答案)B、类图C、对象图D、部署图5、在UML提供的图中,()用于按时间顺序描述对象间的交互。

[单选题] *A、网络图B、状态图C、协助图D、序列图(正确答案)6、在开发一个系统时,如果用户对系统的目标不是很清楚,难以定义需求,这时最好使用()。

[单选题] *A、原型法(正确答案)B、瀑布模型C、V-模型D、螺旋模型7、应该在()阶段制定系统测试计划。

[单选题] *A、需求分析(正确答案)B、概要设计C、详细设计D、系统测试8、在软件项目管理中可以使用各种图形工具来辅助决策,下面对Gantt图的描述不正确的是()。

[单选题] *A、Gantt图表现各个活动的顺序和它们之间的因果关系(正确答案)B、Gantt图表现哪些活动可以并行进行C、Gantt图表现了各个活动的起始时间D、Gantt图表现了各个活动完成的进度9、以下内容中,()应写入操作手册。

[单选题] *A、描述系统对各种输入数据的处理方法B、说明系统升级时厂商提供的服务C、描述系统处理过程的各个界面(正确答案)D、说明系统各部分之间的接口关系10、耦合度描述了()。

软件评测师题库含参考答案

软件评测师题库含参考答案

软件评测师题库含参考答案一、单选题(共100题,每题1分,共100分)1、在数据库系统中; 数据的( ) 是指保护数据库,以防止不合法的使用所造成的数据泄漏、更改或破坏。

A、完整性B、可靠性C、安全性D、并发控制正确答案:C2、采用模2除法进行校验码计算的是()。

A、ASCII码B、海明码C、BCD码D、CRC码正确答案:D3、算术表达式‘(a-b)*(c+d)’的后缀是( ) 。

A、ab-*cd+B、abcd-*+C、ab-cd+*D、ab-c+d*正确答案:C4、1976年Diffie与Hellman首次公开提出()的概念与结构,采用两个从此独立的密钥对数据分别行行加密或解密,且加密过程基于数学函数,从而带来了加密领域的革命性进步。

A、对称加密B、RSA加密C、单向Hash函数D、公钥加密正确答案:D5、网络系统中,通常把 ( ) 置于DMZ区。

A、入侵检测服务器B、财务管理服务器C、Web服务器D、网络管理服务器正确答案:C6、程序质量评审通常是从开发者的角度进行评审,其内容不包括()。

A、与硬件的接口B、功能的通用性C、功能结构D、模块层次正确答案:A7、根据输入输出等价类边界上的取值来设计用例的黑盒测试方法是()。

A、场景法B、等价类划分法C、因果图法D、边界值分析法正确答案:D8、压力测试不会使用到以下哪种测试手段( ) 。

A、并发B、增加量级C、注入错误D、重复正确答案:C9、智能音箱是____的典型应用。

A、两化融合B、区块链C、数据库D、人工智能正确答案:D10、程序运行过程中常使用参数在函数(过程)间传递信息,引用调用传递的是实参的()。

A、地址B、值C、类型D、名称正确答案:A11、对象是面向对象系统的最基本的元素,一个运行期系统就是对象之间的协作。

一个对象通过()改变另一个对象的状态。

A、获得那个对象的属性值B、另一个对象的选择操作符C、创建那个对象的对象类的一个新的对象D、另一个对象的修改操作符正确答案:D12、在层次化局域网模型中,以下关于核心层的描述,正确的是()。

学生高级软件工程复习题

学生高级软件工程复习题

一、选择题:(共10小题,每题1分,共10分)1.使得在多个类中能够定义同一个操作或属性名,并在每一个类中有不同的实现的一种方法是【 B 】。

A)继承 B)多态性 C)约束 D)接口2.类图应该画在Rose的哪种【 B 】视图中。

A)Use Case View B)Logic ViewC)Component View D)Deployment View3.在UML中,类之间的关系有一种为关联关系,其中多重性用来描述类之间的对应关系,下面哪个不是其中之一【 D 】A)0 … 1 B)0 … * C)1 … * D)* … *4.关于下面的类图中所表示的关联关系,下列四个选项中说法错误的是:【 D 】A. 一个学生可以选1到多门课程B. 一个老师可以教0到多门课程C. 一门课程只能由一位老师上课D. 一门课程可以被0到多个学生选课5.和包相比,子系统具有更丰富的语义,它能够通过接口对外提供行为;下面四个选项中,哪个是包和子系统都具有的特点:【】A. 一种分组机制B. 对外提供行为C. 完全封装实现细节D. 容易被替换6.“交通工具”类与“汽车”类之间的关系属于【】。

A)关联关系 B)实现关系 C)依赖关系 D)泛化关系7.下图中的空心箭头连线表示【】关系A)泛化 B)包含 C)扩展 D)实现8.关于通信图的描述,下列哪个不正确【】A)通信图作为一种交互图,强调的是参加交互的对象的组织;B)在ROSE工具中,通信图可在顺序图的基础上按“F5”键自动生成;C)通信图中有消息流的顺序号;D)通信图是顺序图的一种9.计算机由中央处理器、内存、软盘、硬盘、显示器、键盘鼠标等组成。

那么Computer类和其他类(CPU、RAM、FloppyDisk、Monitor、Keyboard、mouse)之间的关系是【】。

A)泛化关系B)实现关系C)包含关系D)聚集关系10.“一个研究生在软件学院做助教(teaching assistant),同时还在校园餐厅打工做收银员(cashier)。

c语言课程设计报告 职工工资管理系统

c语言课程设计报告 职工工资管理系统

一.设计需求说明一、职工工资管理系统功能设计要求1. 输入记录:将每一个职工的姓名、ID 号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。

•该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。

2. 显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。

3. 修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。

4.查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示。

5. 删除记录:可删除数据文件中的任一记录。

6.恢复记录:能恢复被删除的任一记录。

7. 统计: (A) 计算各项工资平均工资及总工资, (B)•统计符合指定条件(如职工工资前三项之和在2000 元以上、2000~1500 元、1500~1000 元) 以内的工资职工人数及占总职工人数的百分比。

(C)按字符表格形式打印全部职工工资信息表及平均工资(•包括各项总的平均工资)。

8.保存数据文件功能。

9.打开数据文件功能。

经过逐层逐块、不断细化、求精过程,编写程序并进行测试、验证,可以逐个模块地分开调试,并通过文件包含或用工程文件的形式进行逐步联合调试。

程序运行结果如下表所示(记录个数至少8 个)。

二.模块设计分析系统功能模块图:工作程序分析①输入:输入职工工资资料通过结构体的数组来进行操作,先头定义数组em[],先输入需要输入的职工人数m,然后进入循环,每次循环将各项输入结构体数组对应项的对应成员中,当循环次数等于人数时,完成全部员工的资料输入,退出循环。

同时将数据储存在ckerk_list文件中并自动保存至磁盘。

注:如首次使用,尚未输入数据,请先输入数据。

输入的数据将自动保存。

再次选择输入功能时原数据将被覆盖。

②保存:将输入的资料存入磁盘读取文件clerk_list,若文件不存在,打印“打开失败并退出。

若存在,则通过循环语句将输入到结构体数组的数据逐个输入磁盘。

程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统)

程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统)

《程序设计基础》课程设计报告题目: 员工工资管理系统院(系): 信息科学与工程学院专业班级:学生姓名:学号:指导教师:20 16 年 12 月 12 日至20 16 年 12 月 23 日武昌首义学院制程序设计基础课程设计任务书目录1需求与总体设计 (1)2详细设计 (1)3编码实现 (4)4运行结果 (21)总结 (24)1需求与总体设计1.1需求描述设计一个利用文件处理方式实现对员工工资(包括员工编号、员工姓名、年月、岗位工资、奖金、扣款和实发)进行管理,具有增加数据、更新数据、查询数据、删除数据、列表显示数据以及重组文件的功能。

1。

2总体设计先以登陆函数登陆,再进入主菜单,菜单中显示各个要实现的操作,以菜单将各个函数联系起来,对菜单操作以实现系统的目的.1。

3数据结构struct user //登陆者信息{char un[10];char up[10];}us[3] = { "aaa","111",”bbb”,”222",”ccc",”333" };struct yg //员工结构体{short zt; //数据状态long bh; //编号char name[20]; //名字char time[11]; //时间long money; //基本工资long jj; //奖金long kk; //扣款long sf; //实发工资};整个程序只运用了结构体的数据结构,结构体运用于登陆者信息和员工信息,将员工信息封装在一个结构体里,再创建结构体数组,将多个员工信息储存在结构体数组中。

2详细设计2.1 系统功能设计主函数和子函数:系统包含一个主函数,和子函数,分别有登陆子函数,菜单子函数,增加数据子函数,更新数据子函数,查询数据子函数,删除数据子函数,统计数据子函数,重组文件子函数,排序数据子函数,最后两个分别是读取文件和写入文件子函数。

C语言职工管理系统源代码及运行截图(简单版)

C语言职工管理系统源代码及运行截图(简单版)

#include<stdio.h>#include<string.h>#define N 100typedef struct worker{char name[20];long number;int y,m,d;char zhicheng[20];char bumen[20];float salary;}Worker;void Display(){printf("\n\n\n\t\t***************职工管理系统*************\n\n");printf("\t\t\t0.退\t\t 出\n");printf("\t\t\t1.新\t\t 建\n");printf("\t\t\t2.显\t\t 示\n");printf("\t\t\t3.查\t\t 询\n");printf("\t\t\t4.删\t\t 除\n\n");}/*******1.新建**********/void Add( Worker w[],int n){int i;printf("\t姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");for(i=0;i< n;i++){printf("员工%d: ",i+1);scanf("%s %ld %d %d %d %s %s %f",w[i].name,&w[i].number, &w[i].y,&w[i].m,&w[i].d,w[i].zhicheng,w[i].bumen,&w[i].salary);}}/*******2.显示**********/void Browse( Worker w[],int n ){int i;printf("\t姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");for(i=0;i< n;i++){printf("员工%d:",i+1);printf("%s\t%ld\t%d-%d-%d\t%s\t%s\t%f\n\n",w[i].name,w[i].number,w[i].y,w[i].m, w[i].d,w[i].zhicheng,w[i].bumen,w[i].salary);}}/*******3.1查询姓名**********/void SearchName( Worker w[],int n ){char name[20];int i;printf("\t\t\t输入要查询的名字:");scanf("%s",name);for( i = 0; i < n; i ++ ){if( strcmp( w[i].name,name ) == 0 ){printf("\n\t\t\t查得信息如下:\n\n");printf("姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");printf("%s\t%ld\t%d-%d-%d\t%s\t%s\t%f\n\n",w[i].name,w[i].number,w[i].y,w[i].m,w[i].d,w[i].zhicheng,w[i].bumen,w[i].salary);return;}}printf("\t\t\t查无此人!");}/*******3.2查询工号**********/void SearchNumber( Worker w[],int n ){long number;int i,k=0;printf("\t\t\t输入要查询的工号:");scanf("%ld",&number);for( i = 0; i < n; i ++ ){if( w[i].number == number ){printf("\n\t\t\t查得信息如下:\n\n");printf("姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");printf("%s\t%ld\t%d-%d-%d\t%s\t%s\t%f\n\n",w[i].name,w[i].number,w[i].y,w[i].m, w[i].d,w[i].zhicheng,w[i].bumen,w[i].salary);return;}}printf("\n\t\t\t查无此人!");}/*******3.查询**********/void Search( Worker w[],int n ){int x;printf("\t\t\t选择查询方式(1.姓名/2.工号):");scanf("%d",&x);printf("\n");switch(x){case 1:SearchName(w,n);break;case 2:SearchNumber(w,n);break;}}/*******4.删除**********/void Delete( Worker w[],int n ){char name[20];int i,j;printf("\t\t\t输入要删除的名字:");scanf("%s",name);printf("\n");for( i = 0; i < n; i ++ ){if( strcmp( w[i].name,name ) == 0 ){printf("\t\t\t将删除以下信息:\n\n");printf("\t姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");printf("\t%s\t%ld\t%d-%d-%d\t%s\t%s\t%f\n\n",w[i].name,w[i].number,w[i].y,w[i]. m,w[i].d,w[i].zhicheng,w[i].bumen,w[i].salary);for( j = i;j<n-1;j++ ){w[j] = w[j+1];}printf("\t\t\t成功删除!\n\n");return;}}printf("\t\t\t查无此人!");}void Run( Worker w[],int n ){int choice;do{Display();printf("\t\t\t输入你的选择:");scanf("%d",&choice);printf("\n");switch( choice ){case 0:break;case 1:Add(w,n);break;case 2:Browse(w,n);break;case 3:Search(w,n);break;case 4:Delete(w,n);n--;break;}}while(choice);}void main(){int n;Worker w[N];printf("\t输入职员个数:");scanf("%d",&n);Run(w,n);}友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!。

工 厂 员 工 管 理 系 统(含附源代码)19

工 厂 员 工 管 理 系 统(含附源代码)19

西安郵電學院高级语言课程设计报告题目:工厂员工管理系统系部名称:电信系专业名称:科技班级:0701班内序号:19学生姓名:潘鸯鸯指导教师:黄茹时间:2008年6月10日至2008年6月20日实验题目:工厂员工管理系统一、实验目的1.熟悉c语言的编译连接和运行过程。

2.掌握c语言的数据类型,熟悉整型、实型、字符型变量的定义方式及如何给它们赋值。

3.掌握if语句及switch语句的运用方法及嵌套应用方法。

4.掌握实现循环结构的三种语句while、do-while.、for 的使用。

5.掌握函数的定义方法和调用方法。

6.能够采用模块化思想调试程序。

二.实验内容1.编写程序并进行调试运行。

2.输入员工信息,并保存于文件。

每个员工包含信息如:工作证号、姓名、性别、工作车间、家庭住址,出生日期,进厂日期,工资信息等。

3.对已存入的员工信息进行更新操作,包括添加一个员工信息、删除某个员工信息和修改某个员工信息。

4.通过输入姓名、工作证号、家庭住址的方式查询员工信息。

5.可通过输入工作证号统计出某个员工的工资情况,也可输入工厂的原料费用、其他费用和工厂的毛收入统计出工厂的赢利情况。

6.对已存入的员工工资信息进行排序操作,可通过选择基本工资排序或其他工资排序来查看员工工资的排序情况。

7.最后输出员工信息,供需要时打印。

二、需求分析1.该程序可用于对员工的基本信息的存储、更新、查询、统计、排序、输出操作,以实现对工厂员工的管理。

2.其中更新功能包括:添加信息、删除信息、修改信息、可根据需要添加一个或多个员工信息,也可对个别员工信息进行适当的删除或修改。

以便随时更新员工信息。

3.程序中设计的查询功能可根据需要从若干数据中查询某个员工信息,并且可根据三种不同的方法查询:按工作证号查询、按姓名查询和按家庭住址查询。

以满足不同的需要。

4.程序中的统计功能包括:基本工资统计,其他工资统计,工厂赢利情况统计,可根据需要查看某个员工的工资信息或工厂的赢利信息。

C#人事工资管理系统实验报告

C#人事工资管理系统实验报告

武汉工业学院数据库应用系统设计实验报告学号:090501102姓名:毕波班级: 计算机091指导教师:人事工资管理系统设计总说明:在当今社会,工资管理是一项必要而且很关键的工作。

现在随着企业数量的急剧增加,处理人们的工资数据变的越来越烦琐艰巨。

如今,计算机已经普及到了几乎每个学校、家庭,我们的学习和生活已经处处离不开计算机的存在。

本系统依据开发要求主要应用于企业人事系统,完成对日常的工资增删查改的数字化管理。

比较系统地对员工的信息和工资进行管理,查询、增添、修改、删除都变的非常简便,节省了大量的工作量。

本课程设计是在学习了《数据库应用系统》和相关开发软件课程之后,让学生通过实际项目的设计、开发,培养学生独立进行数据库软件的建模、在计算机中进行数据库设计、并通过相关软件开发系统的能力。

本系统的基本功能包括:部门信息的管理(查询、添加、修改、删除学生部门等)、职员信息的管理(录入、查询、修改、删除员工的信息等)、工资信息的管理(录入、查询、修改员工的工资等)。

本系统主要用于对员工工资进行管理,能够进行插入、删除、修改、查询和显示员工的信息。

登录该系统时,用户需要输入口令和密码,以确保数据的安全性,成功登录的用户,可以插入员工的信息和工资,并对员工的信息和工资进行增、删、改操作。

基于上述想法,我们将员工数据保存到数据库中。

我们要求系统能够高效快速的处理数据,并且要保证数据的正确性、相容性和安全性。

所以在数据库中需要定义很多触发器,比如删除了某个员工的信息则删除对应的所有工资信息、活着删除了某部门则删除该部门所有的信息等。

所以我们要从数据库中读取数据,并且和界面联系起来,同时也能将用户界面上的数据存储到数据库中。

以上是设计此系统应该注意的地方和设计原则,以下就是遵循这些原则和标准设计出的一套完整的管理系统。

一系统需求:根据题目需求,可以把系统分为三个部分:部门信息管理部分、职员信息管理部分和工资信息管理部分。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++工资管理系统源代码Document number【AA80KGB-AA98YT-AAT8CB-2A6UT-A18GG】#define TITLE "\n 月份工号姓名应发工资各种折扣实发工资\n"#define DATA " %2d %4ld %-10s % % %\n",p1->month,p1->num,p1->name,p1->should_pay,p1->rebate,p1->actual_paytypedef 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();/*主程序模块*/void main(void){short sel;do{menu();scanf("%d",&sel);switch(sel){case 1:head=input(); 建工资档案\n");printf("\t\t\t\t2.新增工资信息\n"); printf("\t\t\t\t3.修改工资信息\n"); printf("\t\t\t\t4.删除工资信息\n"); printf("\t\t\t\t5.查找工资信息\n"); printf("\t\t\t\t6.分类信息列表\n"); printf("\t\t\t\t7.保存信息\n"); printf("\t\t\t\t0.退出\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",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);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;elsep2->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);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;部清单\n");printf("\t\t2.按月输出\n");printf("\t\t3.按工资段输出\n");printf("\t\t0.返回\n");scanf("%d",&sel);}while(sel!=1&&sel!=2&&sel!=3&&sel!=0);head=open();if(head==NULL)return;elseswitch(sel){case 1:printf("\n\t\t\t ******全部清单******\n");printf(TITLE);p1=head;do{printf(DATA);p1=p1->next;}while(p1!=NULL);break;case 2:flag=0;printf("输入要查的月份:");scanf("%d",&month);printf("\n\t\t\t******第%d月工资清单******\n",month); printf(TITLE);do{if(p1->month==month){printf(DATA);p1=p1->next;flag=1;}elsep1=p1->next;}while(p1!=NULL);if(flag==0)printf("没有该月清单\n"); break;case 3:printf("输入最低工资:");scanf("%f",&min);printf("输入最高工资:");scanf("%f",&max);printf("\n\t\t ******%到%工资的名单******\n",min,max); printf(TITLE);p1=head;do{if(p1->actual_pay>min&&p1->actual_pay<max){printf(DATA);p1=p1->next;flag=1;}p1=p1->next;}while(p1!=NULL);if(flag==0)printf("没有该工资段的职工\n"); 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;}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)head=p1;else{do{if(n==1)head=p1;elsep2->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);}/*插入模块*/PAY *insert(){PAY *p3=NULL;char sel;head=open();if(head==NULL)return NULL;elsedo{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);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;elsedo{do{printf("\n选择查找方式:\n"); printf("\t\t1.按工号查找\n"); printf("\t\t2.按姓名查找\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)) 工号删除\n");printf("\t\t2.按姓名删除\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;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");elseprintf("\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;elsedo{do{printf("\n查找要修改的对象:\n"); printf("\t\t1.按工号查找\n");printf("\t\t2.按姓名查找\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);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);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;}elseprintf("你要修改的信息不存在!\n");printf("是否继续是(Y)否(N)\n");choose=getch();}while(choose=='Y'||choose=='y');printf("任意键返回,并存盘……");getch();return head;}。

相关文档
最新文档