资源描述
程序设计课程设计汇报
工资管理系统
院系:地质工程系
班级:地质工程班
组员:陈欣永 胡世俊
李积荣 赵海俊
马小成
目录
一、设计目标……………………………………………………1
二、设计内容和要求……………………………………………2
1.设计内容…………………………………………………3
2.设计要求………………………………………………4
三、总步骤图设计………………………………………………5
四、程序具体功效设计…………………………………………6
五、程序调试……………………………………………………7
六、设计小结……………………………………………………8
七、参考文件……………………………………………………9
附录……………………………………………………………10
一、设计目标
在计算机中建立对应数据结构,利用程序实现工资输入、查询、增、删、改、统计、输出等操作。
深入掌握利用C语言进行程序设计能力;深入了解和利用结构化程序设计思想和方法;初步掌握开发一个小型实用系统基础方法;学会调试一个较长程序基础方法;学会利用步骤图表示算法。
《工资管理系统》设计和实现,此次程序设计关键利用c语言基础知识开发一个简单职职员资管理系统。工资管理系统是一个企业不可缺乏一部分,它利用计算机对职职员资进行统一管理,实现工资管理工作系统化、规范化和自动化,为企业提升工作效率。
二、设计内容和要求
1. 设计内容
关键利用c语言文件操作能力设计开发一个小型管理信息系统,最少含有以下功效:对职员信息录入、修改或删除,经过职员姓名或工号进行查找,并逐项列出相信职职员资信息,另外也能够查看全部职员现在工资情况。有一个文本菜单来调用各个功效函数及一个主菜单来提醒用户怎样操作。
2. 设计要求
在计算机中建立对应数据结构,利用程序实现工资输入、查询、增、删、改、统计、输出等操作。
三、总体步骤图设计
职职员资管理系统
退出
文件中读取
保留职员信息
修改职员信息
输入职员息息
显示职员信息
查找职员信息
删除职员信息
添加职员信息
选择8
从文件中读取
选择0
退出
结束
删除职员信息
增加职员信息
按工资从高到低排序
选择6
选择5
选择4
按姓名
按工号
保留数据
选择7
按姓名
按工号
选择3
选择2
选择1
查找职员信息
输入职员信息
输出职员信息
按姓名
按工号
主菜单
开始
选择操作
四、程序具体功效设计
1、设计一个能够统计企业职职员资数据结构,每条统计包含:职员号,姓名,基础工资,职务工资,津贴。
2、应用文件保留工资管理数据。
3、新增:能将全部输入职职员资数据保留到文件中,并可选择继续输入或退出。
定义数据类型numberTemp,i
i<numberTemp
i++
添加成功
输出职员信息
开始
结束
4、查看:查看全部职员信息,包含职员号,姓名,基础工资,职务工资,津贴。
定义i=0
i<Number
输出职员信息
开始
结束
5、查找:输入职员职员号或姓名,并在文件中查找。若找到,则显示该职员工资详情;不然提醒未找到。不管查找成功否,应还可选择继续查找或退出。
定义n=0
假如n=1
假如n=2
按姓名查找
终止
按工号查找
终止
输入错误
终止
开始
结束
输入n
6、删除:输入职员职员号,并在文件中查找。若找到,提醒是否确定删除。若选择是,则删除文件中该职员信息;若选择否,则取消。若未找到则提醒无此职员信息。不管查找成功否,应还可选择继续查找或退出。
定义n=0
假如n=1
假如n=2
按姓名删除
终止
按工号删除
终止
开始
结束
输入n
7、修改:输入职员职员号在文件中查找。若找到,显示该职员全部信息,不然提醒无此职员信息。不管查找成功否,应还可选择继续查找或退出。
定义mode=0
假如mode=1
假如mode=2
按姓名修改
终止
按工号修改
终止
输入错误
终止
开始
结束
输入mode
8、统计:分类汇总并输出全部职员总工资,并计算出平均工资。
定义i=0
For函数初始值i=0
i<Number
i++
For函数初始值i=0
i<Number
i++
输出职员平均工资
循环体
循环体
开始
结束
输出职员总工资
9、退出:退出程序。
五、程序调试
程序调试任务是排除程序中错误,使程序能顺利地运行并得到预期效果。程序调试阶段不仅要发觉和消除语法上错误,还要发觉和消除逻辑错误和运行错误。要正确利用编辑时提醒错误信息。
调试阶段出现了很多问题,关键以下:
1、 在定义和利用数据类型时出现问题,不清楚字符串输出用s,而错用为c。
2、 忘记“;”或把“;”用错误输入法输入,造成错误。
3、 大括号混乱造成错误。
4、 用文件保留职员信息时,对printf不熟悉,造成使用格式错误,输出内容不符合,经过仔细查对书上格式才改掉。
5、 在读取信息时,不会用scanf,是程序运行结果混乱,造成职员信息错位,或是直接输出0.00等。
六、设计小结
经过这几天努力,职职员资管理系统设计已基础完成。在此次课程设计中,我充足领会了C语言功效强大,包含函数、数组、指针、结构体、文件等。
职职员资管理系统是一个很实用而且使用广泛操作系统。此系统能够降低很多工作量,做到设计合理,便于使用,易于操作;界面友好,容错性高,可在很短时间内,查找出所需职职员资资料,提升工作效率。该系统含有添加、显示、查询、修改、删除等基础功效,以方便对工资各项管理操作。每一条统计包含一个职员工号、姓名、工资等信息,系统各个功效模块全部用函数形式来实现,能够将职员信息保留在文件中,并从文件中读取出来。
在此次课程设计中,我也发觉了自己很多不足,并学到了很多知识。对以前书本中学到知识有了更深刻了解,和灵活利用。不再像以前一样,知识浅显明白,死板套用。编写程序过程,让我感觉到了无限愉快,不仅仅是因为能够将以前学到相关知识灵活利用,还因为在这个过程中学到了太多以前所没有掌握东西。
最终我还掌握到了写复杂程序技巧,在写大程序时应遵守“自顶向下,逐步细化,模块化”方法进行设计;c语言提供了丰富数据库和多种功效函数,我们要善于使用,使我们程序达成最简练这将对我以后c程序学习产生关键影响。
经过这次程序设计,使我加深了对C语言认识,深入熟悉了对C语言功效灵活利用,而且加深了我对程序了解和编写能力,经过文件资料和网络资料帮助,使我对C语言程序设计这一基础学科又一次加深了认识,也意识到了其含有强大功效和发展前景。这会对以后学习有所帮助。
七、参考文件
[1]谭浩强. 《C程序设计》(第三版) 北京:清华大学出版社 .3.
[2]王为青等.《C语言高级编程及实例剖析》 北京:人民邮电出版社 .3.
[3]黄明等.《C语言课程设计》 北京:电子工业出版社 .3.
附录〈源程序〉
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct worker
{
char name[30];
char ID[10];
int salary1,salary2,salary3;
};
int dq(struct worker wo[]);
void show();
void bc(struct worker wo[]);
void add();
void see();
void search();
void ghcz();
void xmcz();
void del();
void xmsc();
void ghsc();
void statistics();
void modify();
void ghxg();
void xmxg();
void reserve();
void back();
void author();
struct worker wo[100]; //保留全部职员信息
int Number=0; //统计总职员人数
void main()
{
int choose=0;
while(true)
{
show();
printf("\t\t====>请选择:");
scanf("%d",&choose);
system("cls");
switch(choose)
{
case 0: exit(0);//退出
break;
case 1: add();
back();//添加职员信息
break;
case 2: see();
back();//查看职员信息
break;
case 3: search();
back();// 查找职员信息
break;
case 4: del();
back();//删除职员信息
break;
case 5: statistics();
back();//统计职职员资
break;
case 6: modify();
back();//修改职员信息
break;
case 7:reserve();
back();//保留数据
break;
case 8:author();
back();//作者信息
break;
default:
break;
}
fflush(stdin);
getchar();
system("cls");
}
}
int dq(struct worker wo[])
{
FILE *fp=NULL;
int i=0;
fp=fopen("C://worker.dat","rb");
while(fread(&wo[i],sizeof(struct worker),1,fp))
i++;
fclose(fp);
return i;
}
void show()
{
printf("\n");
printf("\t****************职职员资管理系统****************\n\n");
printf("\t*☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆*\n\n");
printf("\t^^^^^^^^^^^^^^^[1] 添加职员信息^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[2] 查看职员信息^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[3] 查找职员信息^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[4] 删除职员信息^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[5] 统计职职员资^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[6] 修改职员信息^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[7] 保 存 数 据^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[8] 作 者 信 息^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[0] 退 出 系 统^^^^^^^^^^^^^^^^^\n\n");
printf("\t*★★★★★★★★★★★★★★★★★★★★★★★*\n");
}
void bc(struct worker *wo)
{
FILE *fp=NULL;
fp=fopen("C://worker.dat","ab+");
fwrite(wo,sizeof(struct worker),1,fp);
fclose(fp);
}
//添加职员信息
void add()
{
int numberTemp=0;
int i=0;
struct worker temp;
printf("请输入要添加职员个数:");
scanf("%d",&numberTemp);
for(i=0;i<numberTemp;i++)
{
printf("输入第%d个职员信息\n",i+1);
printf("姓名:");
scanf("%s",temp.name);
printf("工号:");
scanf("%s",temp.ID);
printf("基础工资:");
scanf("%d",&temp.salary1);
printf("职务工资:");
scanf("%d",&temp.salary2);
printf("津贴:");
scanf("%d",&temp.salary3);
wo[Number++]=temp; //写入到数组
bc(&temp); //写入到文件
}
printf("添加成功\n");
}
//查看职员信息
void see()
{
int i=0;
printf("以下是全部职员\n");
printf("\t姓名\t工号\t基础工资\t职务工资\t津贴\n");
while(i<Number)
{
printf("\t%s\t%s\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].salary1,wo[i].salary2,wo[i].salary3);
i++;
}
}
//查找职员信息
void search()
{
int n=0;
printf("1 按姓名查找\n");
printf("2 按工号查找\n");
scanf("%d",&n);
switch(n)
{
case 1: xmcz();
break;
case 2: ghcz();
break;
default: printf("输入错误!\n");
break;
}
}
void xmcz()//按姓名查找
{
char name[30];
int i=0;
printf("请输入要查找职员姓名:");
scanf("%s",name);
system("cls");
printf("\t姓名\t工号\t基础工资\t职务工资\t津贴\n");
for (i=0;i<Number;i++)
{
if (strcmp(name,wo[i].name)==0)
{
printf("\t%s\t%s\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].salary1,wo[i].salary2,wo[i].salary3);
}
}
}
void ghcz()//按工号查找
{
char id[10];
int i=0;
printf("请输入要查找职职员号:");
scanf("%s",id);
system("cls");
printf("\t姓名\t工号\t基础工资\t职务工资\t津贴\n");
for (i=0;i<Number;i++)
{
if (strcmp(id,wo[i].ID)==0)
{
printf("\t%s\t%s\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].salary1,wo[i].salary2,wo[i].salary3);
}
}
}
//删除职员信息
void del()
{
int n=0;
printf("1 按姓名删除\n");
printf("2 按工号删除\n");
scanf("%d",&n);
switch(n)
{
case 1: xmsc();
break;
case 2: ghsc();
break;
}
}
void xmsc()//按姓名删除
{
FILE *fp=NULL;
char name[30];
int i=0;
int j=0;
printf("请输入要删除职员姓名:");
scanf("%s",name);
for(i=0;i<Number;i++)
{
if (strcmp(name,wo[i].name)==0)
{
for (j=i;j<Number-1;j++)
{
wo[j]=wo[j+1];
}
Number--;
}
}
//将剩下数据写入文件 擦除以前数据
fp=fopen("C://worker.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&wo[i],sizeof(struct worker),1,fp);
}
fclose(fp);
printf("删除成功;\n");
}
void ghsc()//按工号删除
{
FILE *fp=NULL;
char id[60];
int i=0;
int j=0;
printf("请输入要删除职职员号:");
scanf("%s",id);
for(i=0;i<Number;i++)
{
if (strcmp(id,wo[i].ID)==0)
{
for (j=i;j<Number-1;j++)
{
wo[j]=wo[j+1];
}
Number--;
}
}
//将剩下数据写入文件 擦除以前数据
fp=fopen("C://worker.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&wo[i],sizeof(struct worker),1,fp);
}
fclose(fp);
printf("删除成功;\n");
}
//统计职职员资
void statistics()
{
int i=0;
double s=0.0;
double sum[100];
for(i=0;i<Number;i++)
{
sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3;
printf("%s总工资为:%f\n",wo[i].name,sum[i]);
}
for(i=0;i<Number;i++)
{
s+=sum[i];
}
printf("平均工资为:%f\n",s/Number);
}
//修改职员信息
void modify()
{
int mode=0;
printf("请选择修改查找方法\n");
printf("1 按姓名查找修改\n");
printf("2 按工号查找修改\n");
scanf("%d",&mode);
switch(mode)
{
case 1: xmxg();
break;
case 2: ghxg();
break;
default: printf("输入错误!\n");
break;
}
}
void xmxg()//按姓名修改
{
FILE *fp=NULL;
char name[30];
int i=0;
printf("请输入要修改职员姓名:");
scanf("%s",name);
for (i=0;i<Number;i++)
{
if (strcmp(name,wo[i].name));
else
break;
}
printf("\t姓名\t工号\t基础工资\t职务工资\t津贴\n");
printf("\t%s\t%s\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].salary1,wo[i].salary2,wo[i].salary3);
printf("请重新输入该职员信息");
printf("姓名:");
scanf("%s",wo[i].name);
printf("工号:");
scanf("%s",wo[i].ID);
printf("基础工资:");
scanf("%d",&wo[i].salary1);
printf("职务工资:");
scanf("%d",&wo[i].salary2);
printf("津贴:");
scanf("%d",&wo[i].salary3);
//信息修改后重新更新文件里面数据 以保持数据一致性
fp=fopen("C://worker.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&wo[i],sizeof(struct worker),1,fp);
}
fclose(fp);
}
void ghxg()//按工号修改
{
FILE *fp=NULL;
char id[30];
int i=0;
printf("请输入要修改职职员号:");
scanf("%s",id);
for (i=0;i<Number;i++)
{
if (strcmp(id,wo[i].ID));
else
break;
}
printf("\t姓名\t工号\t基础工资\t职务工资\t津贴\n");
printf("\t%s\t%s\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].salary1,wo[i].salary2,wo[i].salary3);
printf("请重新输入该职员信息");
printf("姓名:");
printf("姓名:");
scanf("%s",wo[i].name);
printf("工号:");
scanf("%s",wo[i].ID);
printf("基础工资:");
scanf("%d",&wo[i].salary1);
printf("职务工资:");
scanf("%d",&wo[i].salary2);
printf("津贴:");
scanf("%d",&wo[i].salary3);
//信息修改后重新更新文件里面数据 以保持数据一致性
fp=fopen("C://worker.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&wo[i],sizeof(struct worker),1,fp);
}
fclose(fp);
printf("\t=======>修改成功\n");
}
//保留数据
void reserve()
{
printf("\t=====程序在运行时已自动保留.....\n");
}
void back()
{
printf("\t===>按Enter键返回主菜单\n");
}
//作者信息
void author()
{
printf("\t***☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆***\n\n");
printf("\t^^^^^^^^^^^^^^^学校名称^^^^^^^^^^^^^\n\n");
printf("\t^^^^^^^^^^^^^^学院班级^^^^^^^^^^^^^\n\n");
printf("\t^^^^^^^^^^^^^^^XXX制作^^^^^^^^^^^^^\n\n");
printf("\t***★★★★★★★★★★★★★★★★***\n\n");
}
展开阅读全文