《程序设计基础(下)》大作业
报 告
学院名称: 计算机工程学院
专 业: 数字媒体技术
题 目: 员工工资管理系统
学期: 13-14-2 班 级: 13媒体1
学号: 姓 名:
报告成绩: 答辩成绩:
教师姓名:
20##年6月
目录
一.课程设计目的.................................... 3
二. 课题设计内容、具备的功能....................... 3
功能介绍............................................... 3
三. 模块(函数)的划分、各模块的功能................ 4
(1)求平均值流程图..................................... 5
(2) 查询模块功能流程图................................. 5
四. 采用的自定义的数据类型......................... 6
五. 1.程序设计过程中、调试过程中所用的测试用例、程序 运行结果............................................... 6
2.在课程设计中遇到的问题和解决的方法,还没有解决的问题..................................................12
六.通过课程设计的体会、收获........................ 12
七.程序清单 ..........................................13
一.课程设计目的
在本学期的学习中,我初步接触到了C语言,学会了用C语言编写一些小型的程序。然而这这些程序大都功能单一,实用价值不大。本次的C语言大作业就弥补了这些缺憾,为了做好这个C语言大作业,我使用了结构体、指针、文件等知识,做了一个功能较为完备的员工信息管理系统,让自己对C语言的理解和掌握又提升了一个层次。
二.课题设计内容、具备的功能
从对员工信息管理系统的特点入手,可以得出基本的系统需求分析情况。本系统主要实现对员工工资信息的管理,主要功能为员工信息管理和员工信息查找等。本系统分为员工信息输出模块、员工信息增删模块、员工信息处理模块和员工信息查找模块等。具体如图所示:
功能介绍:
运行程序,出现一个“员工工资管理系统的主界面”,其中有8个数字代表的选项,可以按相关的数字进行操作。每一条记录包括员工姓名、员工号、员工年龄、员工工资。
0)退出:
无论在哪个界面,均可退出系统。
1)员工信息输出:
输出全部员工的信息。
2)插入员工信息:
学生可以插入一个或多个员工的信息,包括姓名 、员工号、年龄、工资等。员工
3)删除信息:
可以按员工姓名删除职工信息。
4求平均值:
可以求出员工的平均工资。
5)员工信息排序:
可以按照员工工资对员工信息进行排序。
6)求最值
可以求出员工中工资最少者和工资最多者。
改管理系统具有以下特点:员工
(1)可以多次增加或删除信息。
(2) 系统操作方便,提示信息恰当。
(3) 能够永久保存信息。(文件操作)
(4) 自己根据常识设计数据结构。。
(5) 用结构化、模块化程序设计方法,尽量写成函数。
二.模块(函数)的划分、各模块的功能
该图书馆信息管理系统共有8个功能,分别为信息输出、信息插入、信息删除、求平均值、信息排序、求最值和退出系统;现在用Visio流程图展示出求平均值和查询功能模块,如图所示:
四.采用的自定义的数据类型
1.结构体类型
struct staff
{
char name[10];//员工姓名为字符型
int num;//员工号为整形
int age;//员工年龄为整形
int wage;//员工工资为整形
}sta[10];
(2)整型i,j,flag;
(3)字符型数组name[10];
(4)自定义函数
void print()输出函数;
void insert()插入函数;
void delete()删除函数;
void average()求平均值函数;
void sort()排序函数;
void zuizhi()求最值函数;
void search()查询函数;
五、(1)程序设计过程中、调试过程中所用的测试用例、程序运行结果
1.测试用例:
sun 111 27 7000
函数的主界面如下图所示:
(1) 输入数字“1”,即可得到如下运行结果:
(2)输入数字“2”,即可得到如下运行结果:
(3)依次输入“sun 111 27 7000”,即可得到以下运行结果:
(4)输入数字3,即可得到以下运行结果:
(5)输入“sun”,即可得到以下运行结果:
(6)输入数字“4”,即可得到以下运行结果:
(7)输入数字“5”,即可得到以下运行结果:
(8)输入数字“6”,即可得到以下运行结果:
(9)输入数字“7”,即可得到以下运行结果:
(10)输入“zhang”,即可得到以下运行结果:
(11)输入数字“8”,即可得到以下运行结果:
此步骤为空操作,再按“enter”即可退出程序。
2.在课程设计中遇到的问题和解决的方法,还没有解决的问题
在课程设计中,我遇到了很多问题,比如输出信息的不规范、增删信息的未显示、排序失败和文件的保存有误等。后来通过查阅课本和上网浏览相关问题的解决方法,最终成功地独自解决了这些问题。
六.通过课程设计的体会、收获
在这次的课程设计中,我发现了自己在C语言学习中还存在着许多的不足之处,先前书本上学习的知识点没法完全投入到现在的实际操作运用中去。在文件的设计与使用方面自己还有很多的欠缺,无法更好的将其运用到程序设计中去,还有很多的知识点都只限于书本知识的学习了。通过此次的课程设计我学会了很多东西,不只是仅限于自己在C语言知识上的提升,更多的是在编程的过程中遇到好多自己无法解决的问题,自己变得更加主动去学习,积极去查看课本,自己上网查找相关知识点,然后不断思考。虽然做好这次大作业花费了好长时间,但通过不断的努力,我还是成功地完成了此次的期末的课程大作业。回顾起此次课程设计,至今我仍感慨颇多,从理论到实践,整整三天的废寝忘食,我学到很多很多的东西,不仅巩固了以前所学过的知识,而且学到了如何自己去克服困难。通过这次课程设计,我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正的知识,才能提高自己的实际动手能力和独立思考的能力。在设计的过程遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计,把以前所学过的知识重新温故,巩固了所学的知识。
七.程序清单
/*工资管理系统
一个员工工资管理程序,有输入、输出、插入、删除、排序、查询、数据保存、能查询最高、最低工资、统计平均工资等功能。*/
#include
#include
struct staff
{
char name[10];
int num;
int age;
int wage;
}sta[10],t;
void print();
void insert();
void delete();
void average();
void sort();
void zuizhi();
void search();
int main()
{
int n;
printf(" **************************欢迎进入工资管理系统**************************\n");
do
{
printf(" 1:输出(print)\n");
printf(" 2:插入(insert)\n");
printf(" 3:删除(delete)\n");
printf(" 4:求平均值(average)\n");
printf(" 5:排序(sort)\n");
printf(" 6:求最值(zuizhi)\n");
printf(" 7:查询(search)\n");
printf(" 0:退出(exit)\n");
printf("请输入你要进行操作所对应的序号:\n");
scanf("%d",&n);
switch(n)
{
case 1: print();
break;
case 2:insert();
break;
case 3:delete();
break;
case 4:average();
break;
case 5:sort();
break;
case 6:zuizhi();
break;
case 7:search();
break;
case 0:;
break;
default:printf("错误选择!请重选");
break;
}
}while(n!=0);
return 0;
}
void print()
{
int i;
FILE * fp;
if((fp=fopen("sta.dat","rb"))==NULL)
{
printf("文件不能打开\n");
return;
}
for(i=0;i<10;i++)
{
fread(&sta[i],sizeof(struct staff),10,fp);
printf("%-10s%4d%4d%8d\n",sta[i].name,sta[i].num,sta[i].age,sta[i].wage);
}
fclose(fp);
}
void insert()
{
struct staff s;
FILE * fp;
int i,t,n;
printf("\n请输入姓名:");
scanf("%s",s.name);
printf("请输入员工号:");
scanf("%d",&s.num);
printf("请输入年龄:");
scanf("%d",&s.age);
printf("请输入工资:");
scanf("%d",&s.wage);
if((fp=fopen("sta.dat","rb"))==NULL)
{
printf("不能打开文件.\n");
return;
}
printf("原来的数据是:\n");
for(i=0;fread(&sta[i],sizeof(struct staff),1,fp)!=0;i++)
printf("\n%-10s%4d%4d%8d",sta[i].name,sta[i].num,sta[i].age,sta[i].wage);
n=i;
printf("\n现在的员工工资情况是:\n");
for(t=0;sta[t].wage>s.age&&t
fp=fopen("sta.dat","wb");
for(i=0;i
{
fwrite(&sta[i],sizeof(struct staff),1,fp);
printf("\n%-10s%4d%4d%8d",sta[i].name,sta[i].num,sta[i].age,sta[i].wage);
}
fwrite(&s,sizeof(struct staff),1,fp);
printf("\n%-10s%4d%4d%8d",s.name,s.num,s.age,s.wage);
for(i=t;i
{
fwrite(&sta[i],sizeof(struct staff),1,fp);
printf("%-10s%4d%4d%8d",sta[i].name,sta[i].num,sta[i].age,sta[i].wage);
}
printf("\n");
fclose(fp);
fclose(fp);
}
void delete()
{
FILE * fp;
int i,j,n,flag;
char name[10];
if((fp=fopen("sta.dat","rb"))==NULL)
{
printf("文件不能打开.\n");
return;
}
printf("现在的员工信息:\n");
for(i=0;fread(&sta[i],sizeof(struct staff),1,fp)!=0;i++)
printf("\n%-10s%4d%4d%8d",sta[i].name,sta[i].num,sta[i].age,sta[i].wage);
fclose(fp);
n=i;
printf("\n请输入要删除员工的姓名:\n");
scanf("%s",name);
for(flag=1,i=0;flag&&i
{
if(strcmp(name,sta[i].name)==0)
{
for(j=i;j
{
strcpy(sta[j].name,sta[j+1].name);
sta[j].num=sta[j+1].num;
sta[j].age=sta[j+1].age;
sta[j].wage=sta[j+1].wage;
}
flag=0;
}
}
if(!flag)
n=n-1;
else
printf("不能找到");
printf("\n删除后的文件内容:\n");
if((fp=fopen("sta.dat","wb"))==NULL)
{
printf("不能打开文件:\n");
return;
}
for(i=0;i
fwrite(&sta[i],sizeof(struct staff),1,fp);
fclose(fp);
fp=fopen("sta.dat","rb");
for(i=0;fread(&sta[i],sizeof(struct staff),1,fp)!=0;i++)
printf("\n%-10s%4d%4d%8d",sta[i].name,sta[i].num,sta[i].age,sta[i].wage);
printf("\n");
fclose(fp);
}
void average()
{
FILE * fp;
int i;
float sum=0.0,aver;
if((fp=fopen("sta.dat","rb"))==NULL)
{
printf("文件不能打开.\n");
return;
}
for(i=0;fread(&sta[i],sizeof(struct staff),1,fp)!=0;i++)
printf("\n%-10s%4d%4d%8d",sta[i].name,sta[i].num,sta[i].age,sta[i].wage);
printf("\n");
fclose(fp);
for(i=0;i<10;i++)
sum=sum+sta[i].wage;
aver=sum/10;
printf("平均工资是%10.2f\n",aver);
}
void sort()
{
FILE * fp;
int i,j;
if((fp=fopen("sta.dat","rb"))==NULL)
{
printf("文件不能打开.\n");
return;
}
printf("排序前的员工情况为:\n");
for(i=0;fread(&sta[i],sizeof(struct staff),1,fp)!=0;i++)
printf("\n%-10s%4d%4d%8d",sta[i].name,sta[i].num,sta[i].age,sta[i].wage);
printf("\n");
fclose(fp);
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
if(sta[i].wage
{
t=sta[i];
sta[i]=sta[j];
sta[j]=t;
}
}
printf("排序后的员工情况为:\n");
fp=fopen("sta.dat","wb");
for(i=0;i<10;i++)
{
fwrite(&sta[i],sizeof(struct staff),1,fp);
printf("\n%-10s%4d%4d%8d",sta[i].name,sta[i].num,sta[i].age,sta[i].wage);
}
printf("\n");
fclose(fp);
}
void zuizhi()
{
FILE * fp;
int i,j;
if((fp=fopen("sta.dat","rb"))==NULL)
{
printf("文件不能打开.\n");
return;
}
for(i=0;fread(&sta[i],sizeof(struct staff),1,fp)!=0;i++)
printf("\n%-10s%4d%4d%8d",sta[i].name,sta[i].num,sta[i].age,sta[i].wage);
printf("\n");
fclose(fp);
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(sta[i].wage
{
t=sta[i];
sta[i]=sta[i+1];
sta[i+1]=t;
}
printf("排序后的员工信息是:\n");
fp=fopen("sta.dat","wb");
for(i=0;i<10;i++)
{
fwrite(&sta[i],sizeof(struct staff),1,fp);
printf("\n%-10s%4d%4d%8d",sta[i].name,sta[i].num,sta[i].age,sta[i].wage);
}
printf("\n工资最低的员工的信息是%-10s%4d%4d%8d",sta[9].name,sta[9].num,sta[9].age,sta[9].wage);
printf("\n工资最高的员工的信息是%-10s%4d%4d%8d\n\n",sta[0].name,sta[0].num,sta[0].age,sta[0].wage);
fclose(fp);
}
void search()
{
FILE * fp;
int i,flag=1;
char name[10];
if((fp=fopen("sta.dat","rb"))==NULL)
{
printf("文件不能打开.\n");
return;
}
for(i=0;fread(&sta[i],sizeof(struct staff),1,fp)!=0;i++)
printf("\n%-10s%4d%4d%8d",sta[i].name,sta[i].num,sta[i].age,sta[i].wage);
printf("\n");
fclose(fp);
printf("请输入要查询的员工的姓名:");
scanf("%s",&name);
for(i=0,flag=1;i<10&&flag!=0;i++)
{
if(strcmp(name,sta[i].name)==0)
{
printf("该员工的信息为:\n%-10s%4d%4d%8d\n",sta[i].name,sta[i].num,sta[i].age,sta[i].wage);
flag=0;
}
else
printf("无此员工.\n");
}
}