程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《程序设计基础》
课程设计报告
题目:员工工资管理系统
院(系):信息科学与工程学院
专业班级:
学生姓名:
学号:
指导教师:
20 16 年 12 月 12 日至20 16 年 12 月 23 日
武昌首义学院制
程序设计基础课程设计任务书
目录
1需求与总体设计 (1)
2详细设计 (1)
3编码实现 (4)
4运行结果 (21)
总结 (24)
1需求与总体设计
1.1需求描述
设计一个利用文件处理方式实现对员工工资(包括员工编号、员工姓名、年月、岗位工资、奖金、扣款和实发)进行管理,具有增加数据、更新数据、查询数据、删除数据、列表显示数据以及重组文件的功能。
1.2总体设计
先以登陆函数登陆,再进入主菜单,菜单中显示各个要实现的操作,以菜单将各个函数联系起来,对菜单操作以实现系统的目的。
1.3数据结构
struct user //登陆者信息
{
char un[10];
char up[10];
}us[3] = { "aaa","111","bbb","222","ccc","333" };
struct yg //员工结构体
{
short zt; //数据状态
long bh; //编号
char name[20]; //名字
char time[11]; //时间
long money; //基本工资
long jj; //奖金
long kk; //扣款
long sf; //实发工资
};
整个程序只运用了结构体的数据结构,结构体运用于登陆者信息和员工信息,将员工信息封装在一个结构体里,再创建结构体数组,将多个员工信息储存在结构体数组中。
2详细设计
2.1 系统功能设计
主函数和子函数:
系统包含一个主函数,和子函数,分别有登陆子函数,菜单子函数,增加数据子函数,更新数据子函数,查询数据子函数,删除数据子函数,统计数据子函数,重组文件子函数,排序数据子函数,最后两个分别是读取文件和写入文件子函数。
各个函数的功能:
主函数是一个入口程序从这里进入,再进入登陆函数,实现登陆操作。
登陆函数,只有拥有正确账号密码,正确的操作才可以进入菜单界面进行下一步的操作,并且输入错误三次后将会提示并强制退出。
菜单界面利用switch()函数将各个函数联系起来实现真正的菜单,输入正确的序号可以进行后续的各个操作。
读取函数,将特定文件中的信息,以特定的方式读取到正在运行的程序中,实现读写操作。
写入函数,在添加、更新、删除、重组操作过后进行写入操作,将变换后的数据重新写入文件中。注:每次写入都是将程序中的所有数据重新写入文件。
增加函数,可以新添员工,并将员工的数据输入,并利用写入函数,写入文件中。在增加后会提示是否继续增加,提供了方便。并且如果原数据中有相同编号的员工,会在输入编号后提示有相同的编号的员工,并重新输入编号。增加了程序的健全性。
更新数据函数,以编号来确定更新的员工,更新将重新输入该编号员工的信息,并在更新后执行写入。
删除函数,执行该函数后,将有两种选择,按编号删除,或按名字删除,正确输入后将会将该编号或姓名的数据中的一项zt的值更改为1,使其在其他操作时不被识别,以达到不删除数据,但达到相同的效果的逻辑删除。
显示函数,有两种显示方式,按学号显示或按名字显示,学号显示为从小到大显示。
重组函数,将文件中逻辑删除的数据物理删除,用来节省储存空间,并可以加快运算速度。
统计数据,将文件中的数据统计、计算,并输出,给人以直观的方式显示数据。
排序函数,将数据以实发工资从大到小排序。
2.2 系统流程设计
3编码实现
#define MAX 100
#include
#include
#include
struct user //登陆者信息
{
char un[10];
char up[10];
}us[3] = { "aaa","111","bbb","222","ccc","333" };
struct yg //员工结构体
{
short zt; //数据状态
long bh; //编号
char name[20]; //名字
char time[11]; //时间
long money; //基本工资
long jj; //奖金
long kk; //扣款
long sf; //实发工资
};
yg y[MAX]; //定义数据体数组
int r = 0; //全局变量,人数,包括逻辑删除人数
int p = 0; //登陆的次数,用全局变量能在登陆三次失败时退出程序
void read() //读取文件函数
{
FILE *fp;
char b;
int i;
b = '0';
printf("即将读取文件员工信息.dat\n");
if ((fp = fopen("员工信息.dat", "rb")) == NULL) //读取文件
{
printf("员工信息.dat 文件不存在\n");
printf("是否重新创建该文件?\n");
printf("创建(y) 员工信息.dat 或退出(n)\n");
getchar();
b = getchar();
while (getchar() != '\n')
if (b == 'Y' || b == 'N')
b += 32;
while (b != 'y'&&b != 'n')
{
printf("输入错误!请重新输入!\n");
b = getchar();
while (getchar() != '\n')
if (b == 'Y' || b == 'N')
b += 32;
}
if (b == 'y')
if ((fp = fopen("员工信息.dat", "wb")) == NULL) //文件不存在则创建文件
{
printf("创建文件失败!\n");
printf("按下任意键以退出程序!\n");
getchar();
exit(1);
}
}
if (b == '0')
{
fread(&r, 4, 1, fp);
printf("读取成功!\n");
}
else
printf("创建文件成功!\n");
if (r != 0)
for (i = 0; i < r; i++)
fread(&y[i], sizeof(yg), 1, fp);