资源描述
.. -
?C语言程序设计?
课程设计报告
分值
设计题目:职工工资管理系统
专业:
班级:
学号:
XX:
信息工程学院
1 前言
工资管理系统是企业不可缺少的一局部,它利用计算机对员工工资进展统一管理,实现工资管理系统的系统化、规化和自动化,为企业提高工作效率。本程序旨在训练读者的根本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和构造数组的各种根本操作。本程序中涉及构造体、数组、文件等面的知识。
2 需求分析
2.1课程设计目的
学生在教师指导下运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。通过课程设计〔论文〕,提高学生综合运用所学知识来解决实际问题、使用文献资料、及进展科学实验或技术设计的初步能力,为毕业设计〔论文〕打根底。
2.2 课程设计任务
职工工资管理系统
功能设计要求
〔1〕输入记录:将每一个职工的XX、ID号以及根本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。
〔2〕显示记录:根据用户提供的记录或者根据职工XX显示一个或几个职工的各项工资和平均工资。
〔3〕修改记录:可以对数据文件的任意记录的数据进展修改并在修改前后对记录容进展显示。
〔4〕查找记录:可以对数据文件的任意记录的数据进展查找并在查找前后对记录容进展显示。
〔5〕删除记录:可删除数据文件中的任一记录。
〔6〕统计: (A)计算各项工资平均工资及总工资, (B)统计符合指定条件(如职工工资前三项之和在3000元以上、3000~2000元、2000~1000元) 以的工资职工人数及占总职工人数的百分比。(C)按字符表格形式打印全部职工工资信息表及平均工资(包括各项总的平均工资)。
〔7〕保存数据文件功能。
例如:职工工资信息表
ID号XX根本工资职务工资津贴医疗保险- 公积金- 总工资
01 望 1286 794 198 109 2034
02 明 1185 628 94 114 1740
03 小民 895 438 98 64 73 1294
04 效章 1350 868 210 116 150 2162
05 山 745 398 84 61 68 1098
各项平均工资 1092.2 625.2 145 88.8 108
〔要求:1.源文件采用多文件的工程构造2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的容需要自学〕
2.3 设计环境
〔1〕WINDOWS 2000/2003/XP/7/Vista系统
〔2〕Visual C++
2.4 开发语言
C语言
3 分析和设计
从主菜单中选择相对应的数字,使程序进入不同的程序模块,用switch实现其功能,程序共分为六个模块,分别为:主函数、Input( )函数(输入函数)、Display(T)显示函数〔计算职工工资信息并输入文件〕、Delete (T)删除函数〔从文件中读入信息并将其删除〕,Chick〔T〕查询模块,Change(T);修改模块,sum(T);统计模块
3.1 系统模块图
主菜单
查
找
功
能
显
示
功
能
删
除
功
能
输
入
功
能
退
出
程
序
添
加
功
能
修
改
功
能
按XX删除
按工号查找
修改工号
修改XX
修改职务工资
修改根本工资
修改医疗保险
修改津贴
修改公积金
按XX查找
按工号删除
图3.1 系统模块图
4 具体代码实现
#include"stdio.h"
#include<stdlib.h>
#include<conio.h>
#include<string.h> // 头文件
static int n=0; // 定义静态全局变量,存储已经读入记录的条数。
typedef struct
{
char id[15]; /*ID号*/
char name[10]; /*XX*/
double base; /*根本工资*/
double position; /*职务工资*/
double allowance; /*津贴*/
double insurance; /*医疗保险*/
double fund; //公积金
double wage; //总工资
}Student;
Student T[100];
int Menu_Select()
{
int c;
do{
system("cls"); //清屏
printf("\t\t******************职工工资管理系统*********************\n");
printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\t\t# 1. 添加记录 #\n");
printf("\t\t# #\n");
printf("\t\t# 2. 显示记录 #\n");
printf("\t\t# #\n");
printf("\t\t# 3. 删除记录 #\n");
printf("\t\t# #\n");
printf("\t\t# 4. 查询记录 #\n");
printf("\t\t# #\n");
printf("\t\t# 5.修改记录 #\n");
printf("\t\t# #\n");
printf("\t\t# 6. 统计记录 #\n");
printf("\t\t# #\n");
printf("\t\t# 0. 退出程序 #\n");
printf("\t\t#############################################\n");
printf("\t\t\t请您选择(0-6)选择请输入:");
scanf("%d",&c);
}while(c<0&&c>=7);
return(c);
}
int Input(Student stu[])
{
int i=0;
char sign;
while(sign!='n'&&sign!='N')
{
printf("\tID:");
scanf("\t%s",stu[n+i].id);
printf("\tXX:");
scanf("\t%s",stu[n+i].name);
printf("\t根本工资:");
scanf("\t%lf",&stu[n+i].base);
printf("\t职务工资:");
scanf("\t%lf",&stu[n+i].position);
printf("\t津贴:");
scanf("\t%lf",&stu[n+i].allowance);
printf("\t医疗保险:");
scanf("\t%lf",&stu[n+i].insurance);
printf("\t公积金:");
scanf("\t%lf",&stu[n+i].fund);
stu[n+i].wage=stu[n+i].base +stu[n+i].position +stu[n+i].allowance +stu[n+i].insurance +stu[n+i].fund; ;
printf("\n\t是否继续添加?(Y/N)");
scanf("\t%c",&sign);
i++;
}
return(n+i);
}
void Display(Student stu[])
{
int i;
double m1=0,m2=0,m3=0,m4=0,m5=0;
printf("\n\n~~~~~~~~~~~~~按照XX进展排序!\n\n");
printf("------------------------------------------------------------------------------\n"); //显示的格式
printf("ID XX根本工资职务工资津贴医疗保险公积金总工资\n");
printf("------------------------------------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%-6s%-8s%-11.2lf%-11.2lf%-11.2lf%-11.2lf%-11.2lf%-11.2lf\n",stu[i].id,stu[i].name,stu[i].base,stu[i].position,stu[i].allowance,stu[i].insurance,stu[i].fund,stu[i].wage);
//-14d% -表示左对齐 14 表示十四个字节的位置缺乏用空格补齐
for(i=0;i<n;i++)
{
m1+=stu[i].base;
m2+=stu[i].position;
m3+=stu[i].allowance;
m4+=stu[i].insurance;
m5+=stu[i].fund;
}
if(n!=0)
{
printf("----------------------------------------------------------------------\n");
printf("各项平均工资:%-11.2lf%-11.2lf%-11.2lf%-11.2lf%-11.2lf\n\n",m1/n,m2/n,m3/n,m4/n,m5/n);
}
system("pause"); //系统函数停顿。
}
int Delete(Student stu[])
{
int i=0,j,x;
char m[10];
printf("\t 1.全部删除\n");
printf("\t 2.根据ID号删除\n");
printf("\t请选择: ");
scanf("%d",&x);
if(x==1)
{
for(j=0;j<n;j++)//后一条记录覆盖前一条记录
{
stu[j]=stu[n+1];
}
n=0;
printf("~~~~~已抹掉数据文件中的所有数据!\n");
system("pause");
}
else if(x==2)
{
printf("\t请输入想删除记录中的ID号:");
scanf("%s",m);
while(strcmp(stu[i].id,m)!=0&&i<n)
i++;
if(i==n)
{
printf("\t职工工资管理系统中没有此人!\n");
}
else
{
for(j=i;j<n-1;j++)//后一条记录覆盖前一条记录
{
stu[j]=stu[j+1];
}
printf("\t\t\t已经成功删除!\n");
n=n-1;
}
}
return (n);
}
void Chick(Student stu[])
{
int m;
printf("\t\n请选择查询式:\n"); //printf输出查询格式
printf("\t**************************************\n");//格式:
printf("\t** 1--XX查询 **\n");
printf("\t** 2--ID查询 **\n");
printf("\t**************************************\n");
printf("请选择:");
scanf("%d",&m);
while(m!=1&&m!=2)
{
printf("输入错误,请重新选择:");
scanf("%d",&m);
}
if(m==1) //此处对名字进展特殊处理
{
char s[20];
int i=0;
int f=0;
printf("\t请输入想查询的XX:");
scanf("\t%s",s);
while(strcmp(stu[i].name,s)!=0&&i<n )
{ //名字如果有重复的也照常输出
i++;
}
if(i==n)
{
printf("\t职工工资管理系统中没有此人!\n");
return;
}
else
{
printf("\tID: %s\n",stu[i].id);
printf("\tXX: %s\n",stu[i].name);
printf("\t根本工资: %.2lf\n",stu[i].base);
printf("\t职务工资: %.2lf\n",stu[i].position);
printf("\t津贴: %.2lf\n",stu[i].allowance);
printf("\t医疗保险: %.2lf\n",stu[i].insurance);
printf("\t公积金: %.2lf\n",stu[i].fund);
printf("\t总工资: %.2lf\n",stu[i].wage);
}
}
if(m==2)//用ID作为索引查询
{
char s[20];
int i=0;
printf("\t请输入想查询的ID:");
scanf("\t%s",s);
while(strcmp(stu[i].id,s)!=0&&i<n)
i++;
if(i==n)
{
printf("\t职工工资管理系统中没有此人!\n");
return;
}
printf("\tID: %s\n",stu[i].id);
printf("\tXX: %s\n",stu[i].name);
printf("\t根本工资: %.2lf\n",stu[i].base);
printf("\t职务工资: %.2lf\n",stu[i].position);
printf("\t津贴: %.2lf\n",stu[i].allowance);
printf("\t医疗保险: %.2lf\n",stu[i].insurance);
printf("\t公积金: %.2lf\n",stu[i].fund);
printf("\t总工资: %.2lf\n",stu[i].wage);
}
}
void Change(Student stu[])
{
int m;
printf("\t\n请选择修改式:\n"); //printf输出查询格式
printf("\t**************************************\n");//格式:
printf("\t** 1--ID **\n");
printf("\t** 2--XX **\n");
printf("\t**************************************\n");
printf("请选择:");
scanf("%d",&m);
while(m!=1&&m!=2)
{
printf("输入错误,请重新选择:");
scanf("%d",&m);
}
if(m==1)
{
int i=0;
char m[10];
printf("\t请输入想修改的记录中人的ID:");
scanf("%s",m);
while(strcmp(stu[i].id,m)!=0&&i<n)
i++;
if(i==n)
{
printf("\t职工工资管理系统中没有此人!\n");
return;
}
printf("\tID:");
scanf("\t%s",stu[i].id);
printf("\tXX:");
scanf("\t%s",stu[i].name);
printf("\t根本工资:");
scanf("\t%lf",&stu[i].base);
printf("\t职务工资:");
scanf("\t%lf",&stu[i].position);
printf("\t津贴:");
scanf("\t%lf",&stu[i].allowance);
printf("\t医疗保险:");
scanf("\t%lf",&stu[i].insurance);
printf("\t公积金:");
scanf("\t%lf",&stu[i].fund);
stu[i].wage=stu[i].base +stu[i].position +stu[i].allowance +stu[i].insurance +stu[i].fund;
printf("\t修改成功!");
}
else if(m==2)
{
int i=0;
char m[10];
printf("\t请输入想修改的记录中人的XX:");
scanf("%s",m);
while(strcmp(stu[i].name,m)!=0&&i<n)
i++;
if(i==n)
{
printf("\t职工工资管理系统中没有此人!\n");
return;
}
printf("\tID:");
scanf("\t%s",stu[i].id);
printf("\tXX:");
scanf("\t%s",stu[i].name);
printf("\t根本工资:");
scanf("\t%lf",&stu[i].base);
printf("\t职务工资:");
scanf("\t%lf",&stu[i].position);
printf("\t津贴:");
scanf("\t%lf",&stu[i].allowance);
printf("\t医疗保险:");
scanf("\t%lf",&stu[i].insurance);
printf("\t公积金:");
scanf("\t%lf",&stu[i].fund);
stu[i].wage=stu[i].base +stu[i].position +stu[i].allowance +stu[i].insurance +stu[i].fund;
printf("\t修改成功!");
}
}
void WritetoText(Student stu[])
{
int i=0;
FILE *fp; /*定义文件指针*/
printf("\t保存到文件\n"); /*输入文件名*/
if((fp=fopen("output","w"))==NULL)
{
printf("\t无法翻开文件\n");
system("pause");
return;
}
while(i<n)
{
fprintf(fp,"%s %s %lf %lf %lf %lf %lf %lf\n",stu[i].id,stu[i].name,stu[i].base,stu[i].position,stu[i].allowance,stu[i].insurance,stu[i].fund,stu[i].wage);
i++;
}
fclose(fp); /*关闭文件*/
printf("保存成功!\n");
}
void Read(Student stu[])
{
FILE *fp;
int i;
char filename[20];
strcpy(filename,"output");
if((fp=fopen(filename,"r"))==NULL)
{
printf("找不到%s文件!\n",filename);
system("pause");
return ;
}
n=0;
for(i=0;i<100&&!feof(fp);i++) //这里的100 是前面已经说明了最多可以存100条记录
{
fscanf(fp,"%s %s %lf %lf %lf %lf %lf %lf \n",stu[i].id,&stu[i].name,&stu[i].base,&stu[i].position,&stu[i].allowance,&stu[i].insurance,&stu[i].fund,&stu[i].wage);
n++;
}
fclose(fp);
//qsort(stu,n,sizeof(Student),p);//调用qsort排序
printf("读取成功,文件%s中的所有信息已经读入!\n",filename);
}
int sum(Student stu[])
{
int i;
double s=0,m=0,n1,s1;
for(i=0;i<n;i++)
{
m=0;
m=stu[i].base + stu[i].position + stu[i].allowance;
if(m>2000)
{
s++;
}
}
printf("在职工工资前三项之和于2000的占总职工的百分比:%.2lf\n",s/n);
return(n);
system("pause");
}
void Menu()
{
while(1) //让这里程序循环,否那么就退出程序了。
{
switch(Menu_Select())
{
case 1:
printf("\n\t添加记录到职工工资管理系统\n"); /*添加记录*/
n=Input(T);
WritetoText(T);
system("pause");
break;
case 2:
printf("\n\t\t\t职工工资管理系统记录表\n");
Read(T);
Display(T); /*显示记录*/
system("pause");
break;
case 3:
printf("\n\t从职工工资管理系统中删除记录\n");
n=Delete(T);
WritetoText(T); /*删除记录*/
printf("\t");
system("pause"); /*按任意键继续*/
break;
case 4:
printf("\n\t在职工工资管理系统中查找记录\n");
Chick(T); /*查找记录*/
printf("\t");
system("pause");
break;
case 5:
printf("\n\t修改职工工资管理系统中的记录\n");
Change(T);
WritetoText(T); /*修改数据*/
printf("\t");
system("pause");
break;
case 6:
printf("\n\t****职工工资管理系统统计人数****\n\n"); /*统计记录*/
sum(T);
system("pause");
break;
case 0:
printf("\n\t\t\t欢送您再次使用本程序!\n"); /*完毕程序*/
printf("\n\t\t\n");
system("pause");
exit(0);
}
}
}
int main()
{
char ch[7];
int i,n;
//设置的控制台输出的格式
printf ("\t\t **********职工工资管理系统!**********\n\n");
printf("\t\t\t 您好,欢送你进入本系统!\n\n");
printf("正在读取数据…………\n\n");
Read(T);
Menu();
return 0;
}
5 课程设计总结
5.1 程序运行结果
菜单界面:
图5-1-1
添加信息运行图:
图5-1-2
数据写入文件
图5-1-3
显示数据文件中的数据:
图5-1-4
查询模块,可以根据XX和ID进展查询:
图5-1-5
图5-1-6
修改模块,可以根据XX和ID进展相应的修改:
图5-1-7
图5-1-8
统计模块,统计在职工工资前三项之和于2000的占总职工的百分比:
图5-1-9
删除模块,课根据ID号进展删除,或者是全部删除:
图5-1-10
图5-1-11
5.2 课程设计体会
这一个星期以来,在开发这个工资管理系统过程中我深刻地体会到了自学能力的重要性。毕竟在学校学习到的知识是有限的,而在开发系统的过程中仅凭原有的一点点知识是远远不够的,只有翻阅大量的资料才能学到更多的知识,才能实现其预期的功能。在开发过程中,遇到困难是在所难免的,期间我跟我的指导教师和同学进展交流,从中明白了很多。开发一个系统,恒心和毅力也是不可缺少的,如果一遇到难题就心慌,想要放弃,那这样就不可能完成系统。同样,在开发过程当中,细心也是非常重要的,由于很多事项都要很注意才行,如果没有做到这一点,就会出错。
在开发过程当中,我学到很多,明白了做任事情都要有始有终,要敢于同困难作斗争,要养成独立思考的习惯。在以后的工作和生活当中,我将继续发扬这些好的作风。
在同学和教师的帮助下,根本完本钱次课程设计,根本到达了工资管理系统的要求。
参考文献
?C语言程序设计教程?中国铁道
?C语言课程设计案例精编?郭翠英
?C程序设计教程?淑霞代世雄著
?C程序设计语言?.:机械工业
?C语言程序设计教程[M]?.第3版.高等教育
致
通过学习和练习C程序的设计根底,了解了一些关于C的知识。在设计过程中,好多
展开阅读全文