数据结构工资管理系统课程设计
学年 第 学期
《数据结构》
课程设计报告
题目: 人事工资管理系统 专业: 数字媒体技术 班级: 姓名: 指导教师: 成绩:
计算机与信息工程系
年 月 日
1、设计目的„„„„„„„„„„„„„„„„„„„„2 2、设计内容与要求„„„„„„„„„„„„„„„„„2 1.1设计内容„„„„„„„„„„„„„„„„„„„2 2.2设计要求„„„„„„„„„„„„„„„„„„2 3、总流程图设计„„„„„„„„„„„„„„„„„„3 4、程序详细功能设计„„„„„„„„„„„„„„„„4 5、程序调试„„„„„„„„„„„„„„„„„„„„7 6、设计小结„„„„„„„„„„„„„„„„„„„„7 7、参考文献„„„„„„„„„„„„„„„„„„„„8
附录„„„„„„„„„„„„„„„„„„„„„„„„„„9
1
1、设计目的
在计算机中建立相应的数据结构,利用程序实现工资的输入、查询、增、删、改、统计、输出等操作。
进一步掌握利用C 语言进行程序设计的能力;进一步理解和运用结构化程序设计的思想和方法;初步掌握开发一个小型实用系统的基本方法;学会调试一个较长程序的基本方法;学会利用流程图表示算法。
《工资管理系统》的设计与实现,此次程序设计主要利用c 语言的基础知识开发一个简单的职工工资管理系统。工资管理系统是一个企业不可缺少的一部分,它利用计算机对职工工资进行统一管理,实现工资管理工作的系统化、规范化和自动化,为企业提高工作效率。
2.1设计内容
主要利用c 语言的文件操作能力设计开发一个小型的管理信息系统,至少具有如下功能:对职工信息的录入、修改或删除,通过职工姓名或工号进行查找,并逐项列出相信的职工工资信息,另外也可以查看所有职工目前的工资状况。有一个文本菜单来调用各个功能的函数及一个主菜单来提示用户如何操作。
2、设计内容与要求
2.2设计要求
在计算机中建立相应的数据结构,利用程序实现工资的输入、查询、增、删、改、统计、输出等操作。
3、总体流程图设计
2
3
4、程序详细功能设计
1、设计一个能够记录公司职工工资的数据结构,每条记录包括:职工号,姓名,基本工资,职务工资,津贴。 2、应用文件保存工资管理数据。
3、新增:能将所有输入的职工工资数据保存到文件中,并可选择继续输入或退出。
4、查看:查看所有职工信息,包括职工号,姓名,基本工资,职务工资,津贴。
4
5、查找:输入职工的职工号或姓名,并在文件中查找。若找到,则显示该职工的工资详情;否则提示未找到。无论查找成功否,应还可选择继续查找或退出。
6、删除:输入职工的职工号,并在文件中查找。若找到,提示是否确定删除。若选择是,则删除文件中该职工信息;若选择否,则取消。若未找到则提示无此职工信息。无论查找成功否,应还可选择继续查找或退出。
5
7、修改:输入职工的职工号在文件中查找。若找到,显示该职工的所有信息,否则提示无此职工信息。无论查找成功否,应还可选择继续查找或退出。
8
9、退出:退出程序。
6
5、程序调试
程序调试的任务是排除程序中的错误,使程序能顺利地运行并得到预期的效果。程序的调试阶段不仅要发现和消除语法上的错误,还要发现和消除逻辑错误和运行错误。要正确利用编辑时提示的错误信息。 调试阶段出现了很多的问题,主要如下:
1、 在定义和运用数据类型时出现问题,不清楚字符串的输出用s ,而错用为c 。 2、 忘记“;”或把“;”用错误的输入法输入,造成的错误。 3、 大括号混乱造成错误。
4、 用文件保存职工信息时,对printf 不熟悉,造成使用格式错误,输出内容不符合,通过仔细核对书上的格式才改掉。
5、 在读取信息时,不会用scanf ,是程序的运行结果混乱,造成职工信息错位,或是直接输出0.00等。
6、设计小结
通过这几天的努力,职工工资管理系统的设计已基本完成。在本次课程设计中,我充分领略了C 语言功能的强大,包括函数、数组、指针、结构体、文件等。
7
职工工资管理系统是一个很实用并且使用广泛的操作系统。此系统可以减少很多工作量,做到设计合理, 便于使用, 易于操作; 界面友好, 容错性高, 可在很短的时间内, 查找出所需的职工工资资料, 提高工作效率。该系统具有添加、显示、查询、修改、删除等基本功能,以方便对工资的各项管理操作。每一条记录包括一个职工的工号、姓名、工资等信息,系统的各个功能模块都用函数的形式来实现, 可以将职工信息保存在文件中,并从文件中读取出来。
在本次课程设计中,我也发现了自己很多的不足,并学到了许多的知识。对以前课本中学到的知识有了更深刻的理解,和灵活的运用。不再像以前一样,知识浅显的明白,死板的套用。编写程序的过程,让我感觉到了无限的快乐,不仅仅是因为可以将以前学到的相关知识灵活运用,还因为在这个过程中学到了太多以前所没有掌握的东西。
最后我还掌握到了写复杂程序的技巧,在写大程序时应遵守“自顶向下,逐步细化,模块化”的方法进行设计;c 语言提供了丰富的数据库和各种功能的函数,我们要善于使用,使我们的程序达到最简洁的这将对我以后的c 程序学习产生重要的影响。
通过这次程序设计,使我加深了对C 语言的认识,进一步熟悉了对C 语言功能的灵活运用,而且加深了我对程序的理解和编写能力,通过文献资料和网络资料的帮助,使我对C 语言程序设计这一基础学科又一次加深了认识,也意识到了其具有的强大功能和发展前景。这会对以后的学习有所帮助。
7、参考文献
[1]谭浩强. 《C 程序设计》(第三版) 北京:清华大学出版社 2006.3.
[2]王为青等. 《C 语言高级编程及实例剖析》 北京:人民邮电出版社 2007.3. [3]黄明等. 《C 语言课程设计》 北京:电子工业出版社 2006.3.
8
附录〈源程序〉
#include #include #include
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();//统计职工工资
9
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;
10
struct worker temp;
printf("请输入要添加职工个数:");
scanf("%d",&numberTemp);
for(i=0;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
{
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);
11
system("cls");
printf("\t姓名\t工号\t基本工资\t职务工资\t津贴\n");
for (i=0;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
{
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
{
if (strcmp(name,wo[i].name)==0)
{
for (j=i;j
{
wo[j]=wo[j+1];
}
Number--;
}
12
}
//将剩余数据写入文件 擦除以前的数据
fp=fopen("C://worker.dat","wb");
for (i=0;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
{
if (strcmp(id,wo[i].ID)==0)
{
for (j=i;j
{
wo[j]=wo[j+1];
}
Number--;
}
}
//将剩余数据写入文件 擦除以前的数据
fp=fopen("C://worker.dat","wb");
for (i=0;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
{
sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3;
printf("%s的总工资为:%f\n",wo[i].name,sum[i]);
}
for(i=0;i
{
s+=sum[i];
}
printf("平均工资为:%f\n",s/Number);
}
13
//修改职工信息
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
{
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
{
fwrite(&wo[i],sizeof(struct worker),1,fp);
}
fclose(fp);
}
void ghxg()//按工号修改
{
FILE *fp=NULL;
char id[30];
int i=0;
14
printf("请输入要修改的职工工号:");
scanf("%s",id);
for (i=0;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
{
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");
}
15