C语言实习——职工工资信息管理系统

合集下载

C语言职工工资管理系统设计报告

C语言职工工资管理系统设计报告

C语言职工工资管理系统设计报告设计报告:C语言职工工资管理系统1.系统介绍职工工资管理系统是一种用于管理公司或组织内部职工工资信息的软件系统。

通过该系统,可以方便地录入、修改、查询和删除职工的工资信息,实现对职工工资的统一管理和自动计算。

2.系统需求分析(1)录入职工信息:系统需要提供录入职工信息的功能,包括职工编号、姓名、性别、工作岗位等基本信息。

(2)录入职工工资:系统需要提供录入职工工资的功能,包括基本工资、绩效奖金、加班工资等,以便计算总工资。

(3)查询职工工资:系统需要提供查询职工工资的功能,可以按照职工编号、姓名、性别等关键字查询。

(4)修改职工工资:系统需要提供修改职工工资的功能,可以根据职工编号进行修改。

(5)删除职工信息:系统需要提供删除职工信息的功能,按照职工编号进行删除。

3.系统设计方案(1)数据结构的设计:-职工信息结构体:包括职工编号、姓名、性别、工作岗位等成员。

-职工工资结构体:包括基本工资、绩效奖金、加班工资等成员。

-职工结构体数组:用于存储多个职工的信息和工资数据。

(2)界面设计:-主菜单:包括录入职工信息、录入职工工资、查询职工工资、修改职工工资、删除职工信息等选项。

-子菜单:不同的功能选项对应不同的界面,可以通过输入不同的选择序号实现功能切换。

-信息显示界面:用于显示职工信息和工资信息。

(3)功能设计:-录入职工信息:通过用户输入,将职工信息存储到职工结构体数组中。

-录入职工工资:通过用户输入,将职工工资信息存储到对应的职工工资结构体中。

-查询职工工资:根据用户输入的关键字,查找并显示匹配的职工工资信息。

-修改职工工资:根据用户输入的职工编号,在职工工资结构体中找到对应职工的工资信息,并修改。

-删除职工信息:根据用户输入的职工编号,在职工结构体数组中找到对应职工的信息,并删除。

4.系统实现系统的实现使用C语言编程,使用结构体和数组进行数据的组织和存储,并利用循环和条件判断语句完成功能。

员工工资管理系统(c语言编程)6页

员工工资管理系统(c语言编程)6页

员工工资管理系统(c语言编程)6页一、设计目标1、完成一个员工工资管理系统,包括对员工信息的添加、删除、修改和查询、员工工资管理和统计等功能。

2、程序必须具备易用性、可靠性、安全性和稳定性等特点。

二、程序结构设计员工工资管理系统是由若干模块构成的一个整体,它们之间相互联系,共同完成对员工信息的处理和管理。

程序分为主界面模块、添加模块、删除模块、修改模块、查询模块、统计模块、退出模块。

三、模块功能设计1、主界面模块主界面包括菜单栏和功能栏,菜单栏包括添加、删除、修改、查询、统计和退出功能,功能栏是对主界面菜单的补充,包括一些快捷操作按钮。

2、添加模块添加模块是用来录入员工信息的,可以录入的信息有员工编号、员工姓名、员工部门、员工工作年限、员工基本工资、员工奖金等。

添加模块会对信息进行一系列的校验,要求信息必须完整正确才能录入。

3、删除模块删除模块是用来删除员工信息的,输入员工编号就可以删除该员工的信息。

5、查询模块查询模块提供了多种查询方式,包括按部门查询、按姓名查询、按工作年限查询、按基本工资查询、按奖金查询等。

查询结果会按照员工编号的顺序进行排序。

6、统计模块统计模块会根据查询结果进行工资统计,包括总工资、平均工资、最高工资和最低工资等。

7、退出模块退出模块是用来关闭程序的,保证程序的安全性和稳定性。

四、程序流程设计1、主界面程序启动后,会显示主界面界面,包括菜单栏和功能栏。

2、录入信息点击添加功能或者添加按钮,会进入添加模块,要求用户输入员工信息,录入完成后数据将保存到文件中。

4、修改信息点击修改功能或者修改按钮,会进入修改模块,输入员工编号,然后修改员工信息。

5、查询信息点击查询功能或者查询按钮,会进入查询模块,选择查询方式,输入查询条件,系统将显示符合条件的员工信息。

6、工资统计当查询完成后,点击统计功能或者统计按钮,会进入统计模块,系统将根据查询结果进行统计。

7、程序退出当操作完成后,点击退出功能或者退出按钮,会关闭程序。

史上最牛的c语言—职工工资系统

史上最牛的c语言—职工工资系统

史上最牛的c语言—职工工资系统-CAL-FENGHAI.-(YICAI)-Company One1工资信息管理系统一.题目要求该系统能够实现工理资信息管,系统包括录入,浏览,查询,统计等功能.其中录入功能要求添加新的工资信息到文件,浏览功能要求能按照工资卡号,姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号,姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额.要求1,文件中一行数据对应一个职工工资信息.2,工资信息的数据结构采用结构体数组,一个数组元素对应一条工资单记录. 3,工资单信息包括工资卡号,姓名,月份,应发工资,水费,电费.税金,实发工资等.4,实发工资=应发工资-水费-电费-税金,其中税金计算方法为(1)应发工资<800元,税金=0(2)800<应发工资<1400元,税金=(应发工资-800)*5%(3)应发工资>1400元,税金=(应发工资-1400)*10%二.需求分析根据题目要求,职工信息需要以文件方式存放到文件中,系统要求提供录入操作.并应实现浏览,查询,统计等功能;另外还应提供选择菜单实现功能选择.三.总体设计整体设计可根据题目分为添加信息模块.按姓名浏览模块.按卡号升序浏览模块.按姓名查找模块.按卡号查找模块.按工资降序输出模块.统计模块.保存模块.加载模块.工资信息管理系统[流程图]菜单四.详细设计⒈主函数主函数一般设计得比较简洁.只提供输入,功能处理和输出部分的函数调用.各功能模块用菜单方式.另外菜单部分也可以写成是函数[流程图]显示一系列功能选项判断是否输入0到9N Y根据输入值调用各功能模块函数[程序]/* 为了调用FILE等函数 */#include "stdio.h"#include "conio.h"/* 为了调用atof()等函数 */#include "stdlib.h"#define TRUE 1职工的信息存放格式为:/* 结构体声明 */struct zhigong{int month;float id;float jbgz;float yfs;float sf;float df;float grsds;float yks;float sfs;char name[10];};/* 建立50个元素的结构体数组 */struct zhigong zg[50];struct zhigong name[3];/* 建立结构体变量 */struct zhigong zgone;/* 职员列表中的数量 */int n=0;/* 获得字符串 */char numstr[50];main(){ char ch;n=0;while(TRUE){printf("\n");printf("===========================================\n"); printf(" Welcome!Please choice(0-9) : +\n");printf("0.Add one infomation +\n");/*添加信息*/printf("1.Browse by name +\n");/*按姓名浏览*/printf("2.Browse by ka hao rise +\n");/*按卡号升序浏览*/printf("3.search by name +\n");/*按姓名查找*/printf("4.seach out by number +\n");/*按卡号查找*/printf("5.Print out all by gongzi down +\n");/*按工资降序输出*/printf("6.tongji +\n");/*统计*/printf("7.Save date +\n");/*保存*/printf("8.Load date +\n");/*加载.从文件中加载数据到结构体上*/printf("9.Exit +\n");printf("===========================================\n");ch=getche();switch(ch){case '0':addone();break;case '1':browsename();break;case '2':browseid();break;case '3':byname();break;case '4':idone();break;case '5':listall();break;case '6':tongji();break;case '7':wfile();break;case '8':rfile();break;case '9':return;default:printf("Sorry,please choice again!\n");}}}2各功能模块设计(1)计算个人所得税函数[需求分析]根据输出的工资信息判断该职工的税金多少.根据数值利用以下函数算出税金多少.[流程图]提取职工应发工职信息判断应发工资符合以下那种算法根据应发工资算出税金[程序]float tgrsds(float m){float sui1;float tmp;sui1=0;if(m>=1400){sui1=(m-1400)*0.1;}else if(m>=800 && m<1400){sui1=(m-800)*0.05;}else if(m<800 ){sui1=0;}tmp=sui1;return(tmp);(2)添加信息模块[需求分析]添加信息模块的功能是用户需要增加新的职工信息,请从键盘输入并逐条写到原来的文件当中,注意采用是追加不是覆盖的方式。

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

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

一、概述随着社会的发展和进步,工资管理系统在企业管理中扮演着重要的角色。

为了提高工资管理的效率和准确性,许多企业都倾向于引入计算机系统来进行工资管理。

C语言是一种广泛应用于系统程序设计和应用程序开发的高级语言,具有跨评台性和高效性的特点。

设计一个基于C语言的职工工资管理系统将会成为一个有价值的课程设计。

二、系统功能需求1. 职工信息管理:系统需要能够记录、查看和修改职工的基本信息,包括尊称、工号、部门、入职日期等。

2. 薪资核算:系统应能根据职工的实际出勤、加班情况、请假情况等自动生成薪资,并能够灵活处理各类津贴和抠款。

3. 考勤管理:系统需要提供考勤记录的输入和查询功能,以便及时了解职工的工作情况。

4. 报表输出:系统需要能够生成各类工资报表,方便管理人员进行核对和统计。

5. 数据备份和恢复:系统应具备数据备份和恢复功能,以保证数据的安全性和完整性。

三、系统设计与技术选择在设计该系统时,应采用模块化、分层的设计思路,以便系统具有良好的可维护性和扩展性。

1. 界面设计:可以采用文本界面或图形界面进行设计,具体选择取决于系统的实际应用环境和用户需求。

2. 数据存储:可以选择采用文件系统或数据库来存储系统数据,常见的选择包括文本文件、CSV文件、SQLite数据库等。

3. 算法选择:需要根据系统的具体需求选择合适的算法来实现薪资核算和报表生成等功能。

4. 开发工具:可以选择C语言的集成开发环境(IDE)来进行开发,例如Visual Studio、Dev-C++等。

四、系统实现在进行系统开发时,需要按照设计要求逐步实现各个功能模块,同时进行严格的测试和调试工作,以确保系统的稳定性和准确性。

1. 职工信息管理模块:包括新增、修改、删除职工信息等功能。

2. 薪资核算模块:根据考勤情况自动生成薪资并进行津贴和抠款处理。

3. 考勤管理模块:提供考勤记录的输入和查询功能,确保数据的及时更新和准确性。

4. 报表输出模块:能够生成各类工资报表,包括月度工资表、年度工资统计表等。

C语言实训:职工工资管理系统(总10页)

C语言实训:职工工资管理系统(总10页)

C语言实训:职工工资管理系统(总10页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除指导老师:周杨萍时间:第13周()一、实训目的C语言程序设计实训是C语言程序设计课程教学的重要组成部分。

本课程通过提供学生一个实训练习的机会,巩固、提高学生的基本编程能力,同时通过训练编写综合程序的方式,提高学生分析问题和解决问题的能力,为后续课程的学习打下良好的基础。

二、实训题目和程序清单(包括程序运行截图界面)(一)实训题目:职工工资管理系统。

参考运行界面如下:具体要求:出现上述界面后,用户可以通过输入1-6之间的数字完成所提示的功能。

循环往复,直到输入7,退出系统。

本系统具有职工的工资基本信息(职工号、姓名、应发工资、奖金、水电费、公积金、医疗保险、扣款合计、实发工资),能够根据需要追加、查询、修改、删除、统计并浏览职工的工资信息。

具体功能如下:1.初始化信息(职工信息的输入,包括职工号、姓名、应发工资、奖金、水电费、公积金、医疗保险) ;2.追加职工信息(继续添加职工的信息,要求职工号不重复);3.根据职工号查询(完成按职工号查询指定职工的工资信息);4.根据职工号修改(完成按职工号修改指定职工的工资信息);5.根据职工号删除(完成按职工号删除指定职工的工资信息);6.统计并浏览(完成扣款合计和实发工资的统计,并显示所有职工的工资信息);7.退出(退出系统)。

(提示:在使用字符界面的菜单编程时,需要清屏,可以使用system("cls")函数将屏幕清屏。

需要退出系统时,可以使用exit(0)函数退出。

需要暂停程序的执行时,可以使用system("pause")函数暂停。

使用这些函数时应包含""系统函数头文件。

)(二)程序清单:#include<>gh=001;strcpy(work[1].xm,"aa");work[1].yfgz=1000;work[1].jj=500;work[1].sdf=200;work[1].gjj=100;work[1].ylbx=98;work[1].kkhj=work[1].sdf+work[1].gjj+work[1].ylbx;work[1].sfgz=work[1].yfgz+work[1].jj-work[1].kkhj;/****对第二位进行初始化****/work[2].zgh=002;strcpy(work[2].xm,"bb");work[2].yfgz=2000;work[2].jj=300;work[2].sdf=200;work[2].gjj=100;work[2].ylbx=90;work[2].kkhj=work[2].sdf+work[2].gjj+work[2].ylbx;work[2].sfgz=work[2].yfgz+work[2].jj-work[2].kkhj;/****对第三位进行初始化****/work[3].zgh=003;strcpy(work[3].xm,"cc");work[3].yfgz=1000;work[3].jj=500;work[3].sdf=200;work[3].gjj=100;work[3].ylbx=98;work[3].kkhj=work[3].sdf+work[3].gjj+work[3].ylbx;work[3].sfgz=work[3].yfgz+work[3].jj-work[3].kkhj;/****对第四位进行初始化****/work[4].zgh=004;strcpy(work[4].xm,"dd");work[4].yfgz=1000;work[4].jj=500;work[4].sdf=200;work[4].gjj=100;work[4].ylbx=98;work[4].kkhj=work[4].sdf+work[4].gjj+work[4].ylbx;work[4].sfgz=work[4].yfgz+work[4].jj-work[4].kkhj;count=5;printf("..................初始化成功....................\n");system("pause");}void zjxx() gh);printf("输入姓名:\n");scanf("%s",work[count].xm);printf("输入应发工资:\n");scanf("%f",&work[count].yfgz);printf("输入奖金:\n");scanf("%f",&work[count].jj);printf("输入水电费:\n");scanf("%f",&work[count].sdf);printf("输入公积金:\n");scanf("%f",&work[count].gjj);printf("输入医疗保险:\n");scanf("%f",&work[count].ylbx);work[count].kkhj=work[count].sdf+work[count].gjj+work[count].ylbx; work[count].sfgz=work[count].yfgz+work[count].jj-work[count].kkhj;count++;printf("还需要再添加吗(Y/N)\n");scanf("\n%c",&i);if(i=='y' || i=='Y')zjxx();elsereturn;system("pause");}void cx() gh==zgh)break;}if(i<=count){printf("....................职工的所有信息...........................\n");printf("职工号:%d\n姓名:%s\n应发工资:%.2f\n奖金:%.2f\n水电费:%.2f\n公积金:%.2f\n医疗保险:%.2f\n扣款合计:%.2f\n实发工资:%.2f\n",work[i].zgh,work[i].xm,work[i].yfgz,work[i].jj,work[i].sdf,work[i].gjj,work[i].ylbx,work[i].kkhj,work[i].sfgz);}elseprintf("sorry,mei you ci ren ");system("pause");}void xg() gh==zgh)break;}if(i<=count){printf("....................职工的所有信息...........................\n");printf("职工号:%d\n姓名:%s\n应发工资:%.2f\n奖金:%.2f\n水电费:%.2f\n公积金:%.2f\n医疗保险:%.2f\n扣款合计:%.2f\n实发工资:%.2f\n",work[i].zgh,work[i].xm,work[i].yfgz,work[i].jj,work[i].sdf,work[i].gjj,work[i].ylbx,work[i].kkhj,work[i].sfgz);}else{printf("sorry,mei you ci ren ");}printf("请重新输入姓名");scanf("%s",&work[i].xm);printf("请重新输入应发工资:\n");scanf("%f",&work[i].yfgz);printf("请重新输入奖金:\n");scanf("%f",&work[i].jj);printf("请重新输入水电费:\n");scanf("%f",&work[i].sdf);printf("请重新输入公积金:\n");scanf("%f",&work[i].gjj);printf("请重新输入医疗保险:\n");scanf("%f",&work[i].ylbx);}void sc() gh==zgh)break;}if(i<=count){printf("....................职工的所有信息...........................\n");printf("职工号:%d\n姓名:%s\n应发工资:%.2f\n奖金:%.2f\n水电费:%.2f\n 公积金:%.2f\n医疗保险:%.2f\n扣款合计:%.2f\n实发工资:%.2f\n",work[i].zgh,work[i].xm,work[i].yfgz,work[i].jj,work[i].sdf,work[i].gjj,work[i].ylbx,work[i].kkhj,work[i].sfgz);printf("确定要删除吗请输入Y/N确认\n");setbuf(stdin,NULL);gh=work[i+1].zgh;strcpy( work[i].xm, work[i+1].xm);work[i].yfgz=work[i+1].yfgz;work[i].jj=work[i+1].jj;work[i].sdf=work[i+1].sdf;work[i].gjj=work[i+1].gjj;work[i].ylbx=work[i+1].ylbx;work[i].kkhj=work[i+1].kkhj;work[i].sfgz=work[i+1].sfgz;}work[i].zgh=0 ;strcpy(work[i].xm,"0");work[i].yfgz=0;work[i].jj=0;work[i].sdf=0;work[i].gjj=0;work[i].ylbx=0;work[i].kkhj=0;work[i].sfgz=0;count--;printf("所选信息已删除");}}elseprintf("sorry! mei you ci ren ");system("pause");}void tjll()f %.2f %.2f %.2f %.2f %.2f %.2f\n",work[i].zgh,work[i].xm,work[i].yfgz,work[i].jj,work[i].sdf,work[i].gjj,work[i].ylbx,work[i].kkhj,work[i].sfgz);printf("------------------------------------------------------------------\n");yfgz=yfgz+work[i].yfgz;jj=jj+work[i].jj;sdf=sdf+work[i].sdf;gjj=gjj+work[i].gjj;ylbx=ylbx+work[i].ylbx;}kkhj=sdf+gjj+ylbx;sfgz=yfgz+jj-kkhj;printf("汇总:职工人数%d\n",count-1);printf(" 应发工资%.2f\n",yfgz);printf(" 奖金%.2f\n",jj);printf(" 水电费%.2f\n",sdf);printf(" 公积金%.2f\n",gjj);printf(" 医疗保险%.2f\n",ylbx);printf("------------------------\n");printf(" 扣款合计%.2f\n",kkhj);printf(" 实发工资%.2f\n",sfgz);system("pause");}void main()//***************主函数,主界面**************{ int xz;do{ system("cls"); //清屏,清除屏幕上的所有信息printf("******** 《职工工资管理系统》制作人:********\n");printf(" 1-----初始化信息 \n");printf(" 2-----追加职工信息 \n");printf(" 3-----根据职工号查询 \n");printf(" 4-----根据职工号修改 \n");printf(" 5-----根据职工号删除 \n");printf(" 6-----统计并浏览 \n");printf(" 7-----退出 \n");printf("**********************************************\n");printf(" 输入您的选择(-7):");scanf("%d",&xz);switch(xz){ case 1:csh(); break; //执行子函数csh(完成初始化功能)case 2:zjxx(); break; //执行子函数zjxx(完成追加职工信息)case 3:cx();break; //执行子函数cx(完成根据职工号查询)case 4:xg();break; //执行子函数xg(完成根据职工号修改)case 5:sc(); break; //执行子函数sc(完成根据职工号删除)case 6:tjll(); break; //执行子函数tjll(完成统计并浏览)case 7:printf("\n-----------谢谢,欢迎下次光临!----------\n\n");default:exit(0); //退出系统,exit(0)函数功能是退出程序。

c语言_职工工资管理系统设计

c语言_职工工资管理系统设计

c语言_职工工资管理系统设计
职工工资管理系统是一种满足组织内部行政职能要求的系统。

它主要用于负责处理职工工资和社会保险的行政处理,致力于实现工资的合理控制,提供可靠的社会保障,维护公司和职员的权益。

职工工资管理系统的总体设计涉及到多个方面,包括职工信息管理、职工入职信息处理、职工调动及离职处理、职工考核信息处理、工资用工成本分析等。

职工信息管理:
主要包括对职工个人信息(包括基本情况、职称、工资等)、职工培训考核信息、职工出勤情况等进行管理及整理。

系统利用数据库,将这些信息统一储存,实现集中管理的目的,从而帮助用人单位对职工的资源进行全面了解,并能有效地实施人力资源政策。

职工入职信息处理:
系统提供职工入职信息处理和调整模块,用于处理职工入职注册信息,装订职工入职相关证明及存档备案,以保障组织职位管理及职员资料处理工作的准确性。

职工调动及离职处理:
职工调动及离职处理模块,是处理职工调动或离职变动的必要模块。

企业可利用系统的这一模块进行职工离职报告与合同变更、职工调动安排登记等工作,以保障职工权益的有效管理。

职工考核信息处理:
职工考核信息处理主要提供职工工作评价功能,实施对职工的定期考核,以便企业对职工培训和考核要求进行动态管理,实现培训及考核结果的连续有效跟踪。

工资用工成本分析:
工资用工成本分析模块,可以帮助企业实时监测用工和工资成本,实现工资控制,提高用工管理效率,增加经济效益,减少企业成本。

总之,职工工资管理系统的设计和实现能够有效的解决企业的业务管理需求,实现职工与组织之间健康、高效的沟通,为企业组织发展提供支持。

C语言课程设计---职工工资管理系统

C语言课程设计---职工工资管理系统

C语言程序设计课程设计题目:职工工资管理系统院(系):专业班级:学号:学生姓名:指导教师:教师职称:起止时间:课程设计(报告)任务及评语目录第1章课程设计的目的与要求 (1)1.1 课程设计目的 (1)1.2 课程设计的实验环境 (1)1.3 课程设计的预备知识 (1)1.4 课程设计要求 (1)第2章课程设计内容 (2)2.1程序功能介绍 (2)2.2程序整体设计说明 (2)2.2.1设计思路 (2)2.2.2数据结构设计及用法说明 (3)2.2.3程序结构(流程图) (5)2.2.4各模块的功能及程序说明 (6)2.2.5程序结果 (6)2.3程序源代码及注释 (7)第3章课程设计总结 (16)参考资料 (17)第1章课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。

本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。

C语言程序设计及相应的开发环境。

1.3 课程设计的预备知识熟悉C语言及C语言开发工具。

1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章课程设计内容2.1程序功能介绍该系统能够实现工资信息管理。

系统包括录入,浏览,查询,统计等功能。

其中录入功能要求能够添加新的工资信息到文件;浏览功能要求能按照工资卡号,姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号,姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额。

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

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

C语言课程设计报告---职工工资管理系统湖南涉外经济学院C 语言课程设计(报告书)题目职工工资管理系统作者肖梦星陈名河学院信息科学与工程学院专业软件工程2012102班任课教师李桥二〇一二年十二月二十七日机房管理系统【设计目的】设计“机房管理系统”使其具有上机、下机、查询上机时间、机器使用情况显示等功能。

1、随时都可以来这里上下机,24小时为你服务。

2、上机时间还可以来查询你的上机时间。

3、还可查询本机房所有电脑的使用情况。

【设计思路】根据要求,把学生的信息输入电脑,文本文件存入。

还保存了记录做以查询,使用情况,另外还应提供键盘式选择菜单实现功能选择。

【总体设计】【详细设计】1.主函数主函数设计要求简洁,只提供部分提示语和函数的调用int main() /*主函数*/{int n=0;for(k=0;k<30;k++) /*全部机器标记为未使用*/com[k].f=0;for(;;){switch(main_menu()){case 1:printf("\t\t\t输入学生信息:\n");n=input(stu,n);break;case 2:printf("\t\t\t学生上机\n");online(stu,n);printf("\t\t");system("pause");break;case 3:printf("\t\t\t学生下机\n");offline(stu,n);printf("\t\t");system("pause");break;case 4:printf("\t\t\t上机时间查询\n"); search(stu,n);printf("\t\t");system("pause");break;case 5:printf("\t\t\t机器使用情况显示\n\n"); display();break;case 0:printf("\n\n\t\t感谢使用机房收费管理系统,欢迎下次使用,再见!\n\n");printf("\t\t");system("pause");exit(0);}}return 0;}2.流程图图 2. 主函数流程图3.程序运行截图图3. 主界面截图说明:选择数字0——5,完成相应功能。

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

江西师范大学本科生课程论文封面课程名称C语言课程设计类别: C.本科生组长:黄金峰组员:谢熊飞吴云清王伟林梦婷日期: 2014年7月7日课程设计评语对课程论文的评语:平时成绩:课程论文成绩:总成绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。

目录课程设计评语 (2)目录 (3)1.课程论文题目.............................................................................................. 错误!未定义书签。

2.程序设计思路.............................................................................................. 错误!未定义书签。

3.功能模块图 (6)4.数据结构设计 (6)5.算法设计...................................................................................................... 错误!未定义书签。

6.程序代码...................................................................................................... 错误!未定义书签。

7.程序运行结果.............................................................................................. 错误!未定义书签。

8.编程中遇到的困难及解决方法.. (30)9.总结心得及良好建议 (30)10.致谢 (31)一.课程论文题目职工工资信息管理系统【要求】该系统能够实现工资信息管理.系统包括录入,浏览,查询,统计等功能.其中录入功能要求能够添加新的工资信息到文件;浏览功能要求能按照工资卡号,姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号,姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额。

【提示】1、文件中一行数据对应一个职工工资信息。

2、工资信息的数据结构采用结构体数组,一个数组元素对应一条工资单记录。

3、工资单信息包括工资卡号、姓名、月份、应发工资、税费、电费、税金、实发工资等。

4、实发工资=应发工资—税费—电费—税金,其中税金计算方法为:(1)应发工资<800元,税金=0(2)800<应发工资<1400元,税金=(应发工资—800)*5%(3)应发工资>1400元,税金=(应发工资—1400)*10%二.程序设计思路1、设计思路(1)根据题目要求,应该把职工工资信息用结构体形式输入,在定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;(2)在程序中需实现职工工资浏览、查询、统计等功能的操作,所以需要建立相应的功能模块来实现;(3)另外还需要提供键盘式选择菜单实现功能,在运行时达到所要的目的。

2、总体设计整个系统可以分为信息输入、信息新增、信息浏览、信息排序和信息查询五个主要模块。

3、详细设计(1)工资信息采用结构体数组:struct list{int num; //工资卡号char name[20]; //姓名int month; //月份int salary1; //应发工资int water; //水费int electrisity; //电费float fax; //税金float salary2; //实发工资}list[N]; //list[N]中每个数组元素对应一个职工工资信息(2)输入模块按照工资卡号、姓名、月份、应发工资、水费、电费的顺序输入信息,税金和实发工资根据输入的信息进行计算得到,这些信息被录入到文件中。

文件操作函数:fopen,fwrite,fclose.税金的计算:if(应发工资<=800)税金=0;else if (应发工资>800&&应发工资<=1400)税金=(应发工资-800)*5%;else if (应发工资>1400)税金=(应发工资-1400)*10%;实发工资=应发工资-水费-电费-税金。

(3)新增模块增加新的职工工资信息,从键盘输入并逐条写到原来的输入文件中,采用追加而不是覆盖的方式(以“ab”方式打开文件)。

(4)浏览模块调用排序模块的排序功能,可以浏览排序后的所有职工信息。

(5)排序模块排序模块提供菜单选择,实现按照工资卡号升序、实发工资升序排序。

排序方法可以选择冒泡排序、插入排序、选择排序等,本系统用的是冒泡排序。

(6)查询模块实现按照工资卡号和姓名的查询,采用基本的查找方法即可。

三.功能模块图四. 数据结构设计系统用将职工各项信息以结构体类型struct list 来定义,它包括num ,name[20],month,salary1,water,electricity,fax,salaly2等不同类型的数据项,同时定义了结构体数组,包括N 个数组元素,对应N 个职工,每一个元素用来存放一个职工的数据;每个职工的信息以结构体方式从内存和磁盘文件中进行存储和导出。

以结构体方式来整合职工的不同信息,将不同的数据组合成一个有机整体,非常方便程序的调用。

五.算法设计1、主函数主函数一般设计比较简单,只提供输入、处理和输出部分的函数调用。

各功能模块用菜单方式选择。

[流程图]职工工资信息管理系统主菜单menu()输入模块enter() 新增模块add ()浏览模块browse()排序模块order()按姓名查询search_1()查询模块search()按工资卡号查询search_2() 退出exit(0)按实发工资排序order_2() 按工资卡号排序order_1()N Y#include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #define N 50void main() /***************主函数***************/ {void menu(); /*声明菜单函数*/ menu(); /*调用菜单函数*/ }void menu() /***************菜单函数***************/ {void enter(); void add(); void browse(); void search(); void order(); int n,w1; do {puts("\t\t*********************MENU*************************\n\n"); puts("\t\t\t 1.Enter "); puts("\t\t\t 2.Add");puts("\t\t\t 3.browse all"); puts("\t\t\t 4.Search "); puts("\t\t\t 5.Order "); puts("\t\t\t 6.Exit");puts("\n\n\t\t*************************************************\n"); printf("Choice your number(1-6):[ ]\b\b");开 始显示一系列的功能选择输入n ,判断n 是否是0到6 根据n 值调用各功能模块scanf("%d",&n);if(n<1||n>6) /*对选择数字作判断*/{w1=1;getchar();}else w1=0;}while(w1==1);switch(n) /*选择功能*/{case 1:enter();break; /*输入模块*/case 2:add();break; /*追加模块*/case 3:browse();break; /*浏览模块*/case 4:search();break; /*查找模块*/case 5:order();break; /*排序模块*/case 6:exit(0);}}2、各功能模块设计(1)输入模块[数据结构]把职工的卡号、月份应发工资、水费、电费、税金、实发工资作为结构体成员,如果存放若干个职工信息就用结构体数组。

struct list{int num;char name[20];int month;int salary1;int water;int electrisity;float fax;float salary2;}list[N]; /*list[N]中每个数组元素对应一个职工*/[流程图]1 2/***************输入模块***************/ void enter() /*输入模块*/ {void printf_back(); void save(int n); void input(int i); int i,n;printf("how many workers (0-%d)?:",N-1); scanf("%d",&n);printf("\n enter date now\n\n"); for(i=0;i<n;i++) {printf("\n input %dth worker record.\n",i+1); input(i); /*调用输入函数*/ }if(i!=0)save(n); /*调用保存函数*/printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/ }⑵ 追加模块[需求分析]该模块的功能是用户需要增加新的职工记录,请从键盘输入并逐条写到原来的输入文件中是追加不是覆盖.[流程图]开 始输入职工数目 输入各项信息储存职工信息 返回? 主菜单 浏览职工信息12[程序]/***************追加模块***************/ void add() /*追加模块*/ {void printf_back(); int i,n,m,k; int load(); void save(int n); void input(int i); FILE *fp; n=load();printf("how many workers are you want to add(0-%d)?:",N-1-n); scanf("%d",&m); /*输入要追加的个数*/ k=m+n;for(i=n+1;i<=k;i++) {printf("\n input %dth workers record.\n",i-n); input(i); /*调用输入函数*/ }fp=fopen("workers.txt","ab") /*以ab 方式打开文件,追加保存*/; for(i=n+1;i<=k;i++) /*输出到文件*/ fwrite(&list[i],sizeof(struct list),1,fp);fclose(fp);printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/}开 始输入新增职工数目输入新职工信息储存输入信息返回?浏览职工信息主菜单⑶浏览模块[需求分析]该模块的功能是显示所有职工记录工资信息.[流程图]显示职工工资记录(10个一屏)按任意键显示下一屏按任意键返回主菜单[程序]/***************浏览(全部)模块***************/void browse() /*浏览模块*/{void printf_one(int i);void printf_face();int load();void menu();int i,n;n=load(); /*加载记录*/printf_face(); /*调用显示数据结构项目函数*/for(i=0;i<n;i++){if((i!=0)&&(i%10==0)) /*目的是分屏显示*/{printf("\n\npress any key to contiune...");getch();puts("\n\n");}printf_one(i); /*调用显示一个记录的函数*/printf("\n");}printf("\t there are %d record.\n",n);printf("\n pass any key to back...");getch(); /*按任意键*/menu();}⑷查找模块[需求分析]该模块的功能是根据输入的职工姓名和卡号查找对应的记录.[流程图]NY 121 2[程序]/***************查找函数***************/void search() /*查找模块*/ {int n,w1; do {puts("\t\t\t1.search by name"); puts("\t\t\t2.search by num"); scanf("%d",&n);if(n<1||n>2) /*对选择数字作判断*/ {w1=1; getchar(); }else w1=0; }while(w1==1); switch(n) {void search_1(); void search_2();case 1:search_1();break; case 2:search_2();break; }开 始输入n判断n 值按姓名查询按卡号查询输出返回? 浏览职工信息主菜单}void search_1() /*按姓名查找*/{int load();void printf_face();void menu();void printf_one(int i);int i,n,k,w1=1,w2,w3,w4;struct list s;n=load();do{do{k=-1;printf("\n\nenter name that you want to search! name:");scanf("%s",);printf_face(); /*调用显示数据结构项目函数*/for(i=0;i<n;i++) /*查找所需数据*/if(strcmp(,list[i].name)==0){k=i; /*找到数据*/printf_one(k);break; /*调用显示一个记录的函数*/}if(k==-1){printf("\n\n NO.exit!please");printf("\n\nare you again?\n\t1).again 2).NO and back [ ]\b\b");scanf("%d",&w1);if(w1==2)break;}}while(k==-1&&w1==1); /*如果w1不等于1这直接返回*/w4=0;w3=0;if(k!=-1) /*k不等于-1表示已找到,如果找到则选择操作*/{printf("successful");printf("\n\n what do you want to do?\n\t1).search another 2).back [ ]\b\b");scanf("%d",&w2);}}while(w2==1);}void search_2() /*按卡号查找*/{int load();void printf_face();void menu();void printf_one(int i);struct list s;int i,n,k,w1=1,w2,w3,w4;n=load();do{do{k=-1;printf("\n\nenter num that you want to search! num:");scanf("%d",&s.num);printf_face(); /*调用显示数据结构项目函数*/for(i=0;i<n;i++) /*查找所需数据*/if(s.num==list[i].num){k=i; /*找到数据*/printf_one(k);break; /*调用显示一个记录的函数*/}if(k==-1){printf("\n\n NO.exit!please");printf("\n\nare you again?\n\t1).again 2).NO and back [ ]\b\b");scanf("%d",&w1);if(w1==2)break;}}while(k==-1&&w1==1); /*如果w1不等于1这直接返回*/w4=0;w3=0;if(k!=-1) /*k不等于-1表示已找到,如果找到则选择操作*/{printf("\nsuccessful");printf("\n\n what do you want to do?\n\t1).search another 2).back [ ]\b\b");scanf("%d",&w2);}while(w2==1); menu();}⑸ 排序模块[需求分析]该模块的功能是将职工记录按照一定顺序排序. [流程图]NY1212/***************排序模块***************/ void order() /*排序模块*/ {int w1,n;void order_1(); void order_2(); do {puts("\t\t\t1.order by num"); puts("\t\t\t2.order by salary"); scanf("%d",&n);if(n<1||n>2) /*对选择数字作判断*/开 始输入n判断n 是否是0到2按工资卡号排序按实发工资排序输出返回?浏览职工信息主菜单{w1=1;getchar();}else w1=0;}while(w1==1);switch(n){case 1:order_1();break;case 2:order_2();break;}}void order_1() /*卡号升序排*/{int load();void printf_back();void save(int i);int i,j,n,k;void browse();struct list s;n=load();for(i=0;i<n-1;i++) /*选择法排序*/{k=i;for(j=i+1;j<n;j++)if(list[j].num<list[k].num)k=j;s=list[i];list[i]=list[k];list[k]=s;}save(n);browse();puts("\n\n");printf_back();}void order_2() /*工资降序排*/{int load();void printf_back();void save(int i);int i,j,n,k;struct list s;n=load();for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++) /*选择法排序*/if(list[k].salary2<list[j].salary2)k=j;s=list[i];list[i]=list[k];list[k]=s;}save(n);browse();puts("\n\n");printf_back();}六、程序代码(每个函数都要有功能说明)#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#define N 50void main(){void menu();menu();}void menu() //主菜单函数{void enter();void add();void browse();void search();void order();int n,w1;do{puts("\t\t*********************MENU*************************\n\n");puts("\t\t\t 1.Enter ");puts("\t\t\t 2.Add");puts("\t\t\t 3.browse all");puts("\t\t\t 4.Search ");puts("\t\t\t 5.Order ");puts("\t\t\t 6.Exit");puts("\n\n\t\t*************************************************\n");printf("Choice your number(1-6):[]\b\b");scanf("%d",&n);if(n<1||n>6) /*对选择的数字进行判断*/{w1=1;getchar();}else w1=0;}while(w1==1);switch(n){case 1:enter();break; /*输入模块*/case 2:add();break; /*新增模块*/case 3:browse();break; /*浏览模块*/case 4:search();break; /*查找模块*/case 5:order();break; /*排序模块*/case 6:exit(0); /*退出模块*/}}struct list //结构体定义工资信息{int num; //工资卡号char name[20]; //姓名int month; //月份int salary1; //应发工资int water; //水费int electrisity; //电费float fax; //税金float salary2; //实发工资}list[N]; //list[N]中每个数组元素对应一个职工工资信息void enter() //输入模块函数{void printf_back();void save(int n);void input(int i);int i,n;printf("how many workers (1-%d)?:",N-1);scanf("%d",&n); //输入职工数目printf("\n enter date now\n\n");for(i=0;i<n;i++) //输入职工各项信息{printf("\n input %dth student record.\n",i+1);input(i); //调用职工信息输入函数}if(i!=0)save(n); //储存职工信息printf_back(); //执行返回函数}void add() //新增模块函数{void printf_back();int i,n,m,k;int load();void save(int n);void input(int i);FILE *fp; //定义文件指针变量n=load(); //导出文件信息,得到返回值printf("how many workers are you want to add(0-%d)?:",N-1-n);scanf("%d",&m); //输入新增职工数目k=m+n; //总职工数= 新增职工数+已有职工数for(i=n+1;i<=k;i++) //输入新增职工信息{printf("\n input %dth workers record.\n",i-n+2);input(i); //调用职工信息输入函数}fp=fopen("workers.txt","ab"); //以追加形式打开文件for(i=n+1;i<=k;i++)fwrite(&list[i],sizeof(struct list),1,fp); //将内存中的职工信息输出到磁盘文件中save(n); //储存输入信息fclose(fp); //关闭文件printf_back(); //执行返回函数}void browse() //浏览模块函数{void printf_one(int i);void printf_face();int load();void menu();int i,n;n=load();printf_face();for(i=0;i<n;i++){if((i!=0)&&(i%10==0)) //以10个职工为一组输出{printf("\n\npass any key to continue...");getch();puts("\n\n");}printf_one(i); //输出各职工信息printf("\n");}printf("\t there are %d recode.\n",n);printf("\n pass any key to back..");getch();menu(); //返回主菜单}void search() //查询模块函数{int n,w1;do{puts("\t\t\t1.search by name"); //按姓名查询puts("\t\t\t2.search by num"); //按工资卡号查询scanf("%d",&n);if(n<1||n>2){w1=1;getchar();}else w1=0;}while(w1==1);switch(n){void search_1();void search_2();case 1:search_1();break;case 2:search_2();break;}}void search_1() //按姓名查询{int load();void printf_face();void menu();void printf_one(int i);int i,n,k,w1=1,w2,w3,w4;struct list s;n=load(); //导出文件信息,得到返回值do{do{k=-1;printf("\n\nenter name that you want to search! name:");scanf("%s",); //输入要查找的姓名printf_face(); //输出职工信息项目for(i=0;i<n;i++)if(strcmp(,list[i].name)==0) //查询出与输入姓名相同的职工的信息{k=i;printf_one(k);break;//输出查询结果并中断,说明只能输出查到的第一个数据}if(k==-1) //如果没有查出信息则执行如下选择菜单{printf("\n\n NO.exit!please");printf("\n\nare you again?\n\t1).again 2).NO and back []\b\b");scanf("%d",&w1);if(w1==2)break;}}while(k==-1&&w1==1); //选择1继续循环执行查询w4=0;w3=0;if(k!=-1){printf("successful");printf("\n\n what do you want to do?\n\t1).search another 2).back []\b\b"); //选择查找下一个数据或返回scanf("%d",&w2);}}while(w2==1); //选择1循环执行查询下一个数据menu();}void search_2() //按工资卡号查询int load();void printf_face();void menu();void printf_one(int i);struct list s;int i,n,k,w1=1,w2,w3,w4;n=load();do{do{k=-1;printf("\n\nenter num that you want to search! num:");scanf("%d",&s.num); //输入要查找的工资卡号printf_face(); //输出职工信息项目for(i=0;i<n;i++)if(s.num==list[i].num) //查询出与输入工资卡号相同的职工的信息{k=i;printf_one(k);break;}if(k==-1) //如果没有查出信息则执行如下选择菜单{printf("\n\n NO.exit!please");printf("\n\nare you again?\n\t1).again 2).NO and back []\b\b");scanf("%d",&w1);if(w1==2)break;}}while(k==-1&&w1==1); //选择1继续循环执行查询w4=0;w3=0;if(k!=-1){printf("successful");printf("\n\n what do you want to do?\n\t1).search another 2).back []\b\b");scanf("%d",&w2);}}while(w2==1); //选择1循环执行查询下一个数据menu();void order() //排序功能模块函数{ int w1,n;void order_1();void order_2();do{puts("\t\t\t1.order by num"); //按工资卡号排序puts("\t\t\t2.order by salary 2"); //按实发工资排序scanf("%d",&n);if(n<1||n>2){w1=1;getchar();}else w1=0;}while(w1==1);switch(n){case 1:order_1();break;case 2:order_2();break;}}void order_1() //按工资卡号升序排序{int load();void printf_back();void save(int i);int i,j,n;void browse();struct list s;n=load();for(i=0;i<n-1;i++) //冒泡排序法,按职工工资卡号升序排列出职工信息{for(j=i+1;j<n-1;j++){if(list[j].num<list[i].num)s=list[j];list[j]=list[i];list[i]=s;}}save(n); //储存排序后的信息browse(); //显示排序后的信息puts("\n\n");printf_back(); //执行返回函数}void order_2() //按实发工资升序排序{int load();void printf_back();void save(int i);int i,j,n;struct list s;void browse();n=load();for(i=0;i<n-1;i++) //冒泡排序法,按实发工资升序排列出职工信息{for(j=i+1;j<n-1;j++){if(list[i].salary2<list[j].salary2)s=list[j];list[j]=list[i];list[i]=s;}}save(n); //储存排序后的信息browse(); //显示排序后的信息puts("\n\n");printf_back(); //执行返回函数}void save(int n) //储存函数{FILE *fp;int i;fp=fopen("workers.txt","wb"); //以只写方式打开文件for(i=0;i<n;i++)fwrite(&list[i],sizeof(struct list),1,fp); //将内存中的职工信息输出到磁盘文件中fclose(fp); //关闭文件}int load() //导出文件信息{int i;fp=fopen("workers.txt","rb"); //以只读方式打开文件for(i=0;!feof(fp);i++)fread(&list[i],sizeof(struct list),1,fp); //读出磁盘文件中的职工信息fclose(fp); //关闭文件return(i-1); //返回数值i-1}void input(int i) //职工信息输入函数{float salary2(int i);float fax(int i);printf("No.:");scanf("%d",&list[i].num);printf("name:");scanf("%s",list[i].name);printf("month:");scanf("%d",&list[i].month);printf("salary1:");scanf("%d",&list[i].salary1);printf("water:");scanf("%d",&list[i].water);printf("electricity:");scanf("%d",&list[i].electrisity);fax(i); //计算税金salary2(i); //计算实发工资}float fax(int i) //税金计算函数{if(list[i].salary1<800)list[i].fax=0;else if(list[i].salary1<1400)list[i].fax=(((list[i].salary1-800)*5/100));else list[i].fax=(((list[i].salary1-1400)/10));return list[i].fax;}float salary2(int i) //实发工资计算函数{list[i].salary2=(list[i].salary1-list[i].water-list[i].electrisity-list[i].fax);return list[i].salary2;}void printf_back() //返回函数{int w;void menu();void browse();printf("\n\n\tsuccessful!");printf("what do you want to do?\n\n\t1).browse all now\t2).back: []\b\b"); //菜单选择浏览职工信息或返回主菜单scanf("%d",&w);if(w==1)browse(); //输入1选择浏览职工信息else menu(); //输入2返回主菜单}void printf_one(int i) //单个职工信息输出函数{printf("%9d",list[i].num);printf("%9s",list[i].name);printf("%9d",list[i].month);printf("%9d",list[i].salary1);printf("%9d",list[i].water);printf("%9d",list[i].electrisity);printf("%9.2f",list[i].fax);printf("%9.2f",list[i].salary2);}void printf_face() //职工信息项目{printf("\n\tNo. name month salary1 water electrisity fax salary2\n");}七、程序运行结果1、主函数运行,显示主菜单函数menu()2、输入数字1,添入两组数据3、如果输入数字2,新增一组数据并浏览4、输入数字3,浏览所有职工信息5、输入4,进行查询程序,再输入1 ,按姓名查询,输入2 ,按工资卡号查询6、输入数字5,进行排序程序,输入1 ,按卡号排序,输入2按实发工资排序。

相关文档
最新文档