您的位置:首页 > 编程语言 > C语言/C++

C语言课程设计 工资管理系统

2010-11-14 13:58 393 查看
课设申报表:

南昌航空大学
信息工程学院课程设计课题申报表

专业
方向
教育技术学

指导
教师
姓名
年龄
学历
职称
(职务)
设计地点
D503
研究生
讲师
学生人数
1人
课题名称
员工工资管理系统
课题工作内容
1、分析选题——《员工工资管理系统》;
2、和相关公司管理工资等人员进行交流,了解他们的需求;
3、进行《员工工资管理系统》各模块功能分析及设计;
4、详细设计各实现模块功能的函数以及详细代码,并在TC2.0中调试。
5、完成主函数的设计及代码输入,将各个模块通过主函数联系在一起来实现系统的功能。
6、进行程序的调试和运行并完成《员工工资管理系》。

工作条件
课题
类型
是否结合实际
综合训练性
预计工作量
使用计算机情况
使用
软件
TC2.0
备注
满足
基本满足
不满足





预计
上机
时数
32
系负责人: 申报人: 2010年 10月 25日
说明: 1、课题类型:理论研究① 应用研究② 开发研究③ 工艺设计④ 工程设计⑤ 设备设计⑥ 软件设计⑦
2、是否结合实际:是① 否②
3、综合训练性:强① 较强② 一般③ 较差④
4、预计工作量:重① 中② 一般③

课程设计任务书:



C语言 课程设计任务书
20010 - 2011 学年 第 一 学期 第 10周- 11 周

题目
员工工资管理系统
内容及要求
通过使用使用工资管理系统可以大大减少有关人员的工作量,而且方便快捷,有效解决了工资信息的混乱,不易查找、添加、修改等问题的。本系统可以使用户很方便的管理职工的工资信息,节省了时间,大大提高工作效率。
系统包括以下功能模块:
1、能够实现职信息的录入;2、能够实现职工信息的浏览;3、能够实现职工信息的查找;4、能够实现职工信息的删除;5、能够实现职工信息的添加;6、能够实现职工信息的修改
进度安排
本次课程设计安排于本学期10、11周,总共学时数为32学时;
10周周一至周二:完成课题的选择和分析;
10周三至周五:调查并分析需求及定出各个模块功能。
11周周一至周三:详细设计各个功能模块流程及代码,并进行调试
11周周四至周五:写出主函数,实现总模块功能,调试并能正常运行
11周周五:完成并生成可执行程序并打包。
学生姓名:白俊
指导时间:2010.11.01──2010.11.14
指导地点: D 楼 503 室
任务下达
2010年 11月 01 日
任务完成
2010年11月 14日
考核方式
1.评阅 √  2.答辩 □ 3.实际操作□  4.其它□
指导教师
系(部)主任
注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。
2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。

课设说明书:

课程设计说明书

课程设计名称: C语言课程设计

课程设计题目: 员工工资管理系统

学 院 名 称: 信息工程学院

专业: 教育技术学 班级:

学号: 姓名: 白俊

评分: 教师:

2010 年 11 月 14 日

由每位学生填写、由任教教师保存待查

正文:
一 、选题分析:
1、 选题的来源:
生活中的各种中小型企业的员工的工资管理。
2、 选题的意思:
工资管理系统是每个企事业单位一项必不可少的内容,方便实用的员工工资管理系统对于提高现代工资管理效率、优化管理具有重要意义。通过使用工资管理系统,可以清楚员工的工资基本信息,为使用者管理员工工资提供更大的方便。
3、 选题拟达到的目标
工资管理系统是能够运行在普通个人电脑上、为使用者提供工资信息管理功能的工具软件。使用者通过工资管理系统可对每个员工基本工资信息进行更有效的管理。主要是为使用者提供方便的信息记录、修改、增加、删除和查询等主要功能,为使用者提供了信息管理极大的方便。
二 、 系统使用对象分析
1、 使用对象文化背景分析:使用者主要是各个企事业单位的管理工资的会计等工资管理人员并且懂得使用基本电脑操作。
2、 使用对象性格特点分析:工作认真仔细、负责任。
三 、 选题拟解决的问题
1、选题内容的重点和难点分析:该工资管理系统的重点内容是写出录入、浏览、查询、删除、添加、修改模块的实现函数。难点是:避免职工号重复的函数语句的设计以及结构体、指针和文件结合使用,尤其是指针链表的在插入数据时的应用。
2、系统拟解决的问题 : 1).职工的职工号不能相同,否则在查找信息的时候如果两个人的职工号相同怎只能输出一个人的信息。本系统采用了调用srand((int)time(0))函数并通过em[i].num=rand()%10000+20000000产生随机数并用if(em[i].num!=em[i-1].num)
{}语句来判断职工号是否相同。职工号每一个职工特有的与其他人不一样这样就避免了信息的漏查、信息的混乱。2)修改职工信息模块要有针对性,可以选择要修改的职工的信息。实现本功能可以采用switch语句和赋值语句来实现修改项的选择和内容的修改。
四 、 拟采用的技术手段
拟采用的技术手段特性及优缺点分析
1) 系统功能特点分析:1、录入功能:可以将所有工人工资的基本信息录入;2、添加功能:可以将新的工资信息;3、查询功能:可以按员工的姓名、工号进行查询;4、删除功能:可以删除已有的工资信息。
2) 采用的技术的介绍 本系统开发拟采用的技术手段主要是使用TC2.0来进行系统的设计和开发的。
3)系统开发过程中的技术难点分析:函数、数组、指针、结构体和文件在模块中的综合应用,以及怎样解决职工号不重复这一问题,保证信息的单一。
五 、 总体设计
本系统可分为六个主要的模块:1.录入职工信息模块;2.浏览职工信息模块;3、查询职工信息模块;4、删除职工信息模块;5、添加职工信息模块;6修改职工信息模块。
其中查询模块又分为:按学历查询、按电话号码查询和按职工号查询三个子模块。
修改模块可以对一个职工的不同信息分别进行修改。
模块如下所示:
录入职工信息
浏览职工信息 按职工号查询
查询职工信息 按学历查询
工资管理系统 删除职工信息 按电话号码查询
添加职工信息
修改职工信息
退出


六、系统详细设计
1、功能选择菜单界面:列出选择菜单,进行选择操作。
功能截图1-1:打开执行文件弹出导航界面

该模块实现该部分功能的函数是菜单函数。
主要代码:
void menu() /*菜单函数*/
{
printf("/n");
printf(" ******************欢迎进入职工信息管理****************/n");
printf("/n 1.录入职工信/n");
printf("/n 2.浏览职工信息/n");
printf("/n 3.查询职工信息/n");
printf("/n 4.删除职工信息/n");
printf("/n 5.添加职工信息/n");
printf("/n 6.修改职工信息/n");
printf("/n 7.退出/n");
printf("/n ************************谢谢使用**********************/n");
printf("/n");
printf("/n");
}
主要是输出语句,但是通过按相应的数字键就会在主函数中调用相应的函数来实现功能。
2、录入职工信息模块:主要是负责将职工的基本信息记录到该系统中。
功能截图2:
图2-1:按数字键1进入职工信息录入界面先输入要录入职工的人数

图2-2:然后输入职工的相关信息

该模块主要是通过scanf语句将数据输入到结构体中然后通过调用save()函数将数据保存在系统的文件夹中。主要代码如下:
void input() /*录入函数*/
{int i,m;
printf("请输入需要创建信息的职工人数(1--100):/n");
scanf("%d",&m);
for (i=0;i<m;i++)
{printf("职工号: ");
srand((int)time(0));//该函数是随机函数通过它产生职工号,主要是避免职工号重复出现
em[i].num=rand()%10000+20000000;
if(em[i].num!=em[i-1].num) //通过该语句判断职工号是否重复
printf("%8d ",em[i].num);
printf("/n");
printf("请输入姓名: ");
scanf("%s",em[i].name);
getchar();
printf("请输入性别(f--女 m--男): ");
scanf("%c",&em[i].sex);
printf("请输入年龄: ");
scanf("%d",&em[i].age);
printf("请输入学历: ");
scanf("%s",em[i].xueli);
printf("请输入工资: ");
scanf("%d",&em[i].wage);
printf("请输入住址: ");
scanf("%s",em[i].addr);
printf("请输入电话: ");
scanf("%s",em[i].tel);
printf("/n");}
printf("/n创建完毕!/n");
save(m);}
3、浏览职工信息模块:查看全部职工的信息。
功能截图3:
图3-1:按数字键2浏览已经输入的全部职工的信息

该模块主要用一个for语句将结构体中所有的信息一次输出。
主要代码如下:
void display() /*浏览函数*/
{int i;
int m=load();
printf("/n 职工号 姓名 性别 年龄/t学历/t工资/t/t住址/t/t电话 /n");
for(i=0;i<m;i++)
printf("/n%d%s%c%d/t%s/t%d/t%s%s/n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
}
4、删除职工信息模块:删除指定的职工的信息。
功能截图4:
图4-1:按数字键3进入到删除界面,先通过职工号查询要删除的职工信息

图4-2:查找到要删除的职工的信息,确认删除,浏览删除后的信息。

该模块流程:首先根据操作员输入的职工号进行查找,如果该职工号存在,进行确认后就可以删除该职工的信息,如果经过查找没有该职工号则输出:“对不起,查无此人!”
删除后下一个职工的信息则会上移到被删除职工信息的位置。如果没有下一个职工则不移。
主要代码:
void del() /*删除函数*/
{
int m=load();
int i,j,n,t,flag,num;
printf("/n 原来的职工信息:/n");
display(); /* 调用浏览函数*/
printf("/n");
printf("请输入要查找的职工号(20001111---20009999):/n");
scanf("%d",&num);
for(flag=1,i=0;flag<=m&&i<m;i++) {
if(num==em[i].num)
{
printf("/n已找到此人,原始记录为:/n");
printf("/n 职工号 姓名 性别 年龄/t学历/t工资/t/t住址/t/t电话 /n");
printf("/n %d %s %c %d/t%s/t%d/t %s %s/n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
printf("/n确实要删除此人信息请按1,不删除请按0/n");
scanf("%d",&n);
if(n==1) /*如果删除,则其他的信息都往上移一行*/
{
for(j=i;j<m;j++) { //通过for语句实现移动
strcpy(em[j].name,em[j+1].name);
em[j].num=em[j+1].num;
em[j].sex=em[j+1].sex;
em[j].age=em[j+1].age;
strcpy(em[j].xueli,em[j+1].xueli);
em[j].wage=em[j+1].wage;
strcpy(em[j].addr,em[j+1].addr);
//em[j].tel=em[j+1].tel;
strcpy(em[j].tel,em[j+1].tel);
}
flag=0;
}
}
}
if(!flag)
m=m-1;
else
printf("/n对不起,查无此人!/n");
printf("/n 浏览删除后的所有职工信息:/n");
save(m); /*调用保存函数将删除后的信息保存*/
display(); /*调用浏览函数显示删除后的信息情况*/
printf("/n继续删除请按1,不再删除请按0/n");
scanf("%d",&t);
switch(t)
{
case 1:del();break;
case 0:break;
default :break;}
}
5、添加职工信息模块:在已有其他职工信息后添加新增的职工的信息。
功能截图5:
图5-1:按数字键4进入到添加界面,先显示已有的信息然后输入要添加的人数,再输入相关的新的信息。

图5-2:显示添加完毕

图5-3:添加完后显示所有的职工信息以便确认添加成功。

该模块通过调用添加函数add()来完成的。基本上和录入模块的语句一样,通过scanf语句输入信息,再调用save()函数保存信息,将人数重新赋值后调用浏览函数。
主要代码及说明:
void add()/*添加函数*/
{
FILE*fp;
int n;
int count=0;
int i;
int m=load();
printf("/n 原来的职工信息:/n");
display(); /* 调用浏览函数先预览已有信息*/
printf("/n");
fp=fopen("emploee_list","a");
printf("请输入想增加的职工数:/n");
scanf("%d",&n);
for (i=m;i<(m+n);i++) //用for语句逐个添加信息
{printf("/n 请输入新增加职工的信息:/n");
printf("请输入职工号: ");
srand((int)time(0)); //通过随机函数产生职工号
em[i].num=rand()%10000+20000000;
if(em[i].num!=em[i-1].num) //判断职工号是否相同
printf("%8d ",em[i].num);
printf("/n");
printf("请输入姓名: ");
scanf("%s",em[i].name);
getchar();
printf("请输入性别(f--女 m--男): ");
scanf("%c",&em[i].sex);
printf("请输入年龄: ");
scanf("%d",&em[i].age);
printf("请输入学历: ");
scanf("%s",em[i].xueli);
printf("请输入工资: ");
scanf("%d",&em[i].wage);
printf("请输入住址: ");
scanf("%s",em[i].addr);
printf("请输入电话: ");
scanf("%s",em[i].tel);
printf("/n");
count=count+1;
printf("已增加的人数:/n"); //输出新增的人数
printf("%d/n",count);
}
printf("/n添加完毕!/n");
m=m+count; //m为现有的人数为保存函数中的m做准备
printf("/n浏览增加后的所有职工信息:/n");
printf("/n");
save(m);
display();
fclose(fp);
}
6、修改信息模块:对已有的某个职工的具体信息进行修改,可以单个修改信息如:只修改姓名、性别、年龄、学历等。主要针对经常变化的信息。
功能截图6:
图6-1:按数字键5进入到修改功能

图6-2:先输入要修改的职工号查找到该职工的信息。

图6-3:确认要修改并选择要修改该职工的哪项信息

图6-4:假如选择修改电话号码(按数字键7)

图6-5:确认修改,并显示修改后所有职工的信息

该模块主要是先通过职工号找打要修改的职工信息,然后通过导航修改需要修改的信息
修改时调用修改函数modify()运用重新赋值的方法来修改,修改之后调用save()函数保存然后调用浏览函数预览修改过的信息,如果还需修改再输入进行修改。
主要代码及说明:
void modify() /*修改函数*/
{
int num;
char name[10];
char sex;
int age;
char xueli[30];
int wage;
char addr[30];
char tel[50];
int b,c,i,n,t,flag,j,d;
int m=load(); /*导入文件内的信息*/
printf("/n 原来的职工信息:/n");
display(); /* 调用浏览函数*/
printf("/n");
printf("请输入要修改的职工的职工号(20001111---20009999):/n");
scanf("%d",&num);
for(d=0;d<m:d++){
if (num!=em[d].num) //检查职工号是否输错
printf(“对不起,职工号输入有误!”)
else continue;
}
for(flag=1,i=0;flag<=m&&i<m;i++)
{
if(num==em[i].num)
{
printf("/n已找到此人,原始记录为:/n");
printf("/n 职工号 姓名 性别 年龄/t学历/t工资/t/t住址/t/t电话 /n");
printf("/n %d %s %c %d/t%s/t%d/t %s %s/n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
printf("/n确实要修改此人信息请按1 ; 不修改请按0/n");
scanf("%d",&n);
if(n==1)
{
printf("/n需要进行修改的选项/n 1.姓名 2.性别 3.年龄 4.学历 5.工资 6.住址 7.电话/n");
printf("请输入你想修改的那一项序号:/n");
scanf("%d",&c);
if(c>8||c<1)
printf("/n选择错误,请重新选择!/n");
}
j=i;
flag=0;
do {
switch(c) /*因为当找到第i个职工时,for语句后i自加到最后,所以下面的应该把改后的信息赋值给第j(将i的值赋给j)个人*/
{
case 1:printf("姓名改为: ");
scanf("%s",em[j].name);
//strcpy(em[j].name,name);
break;
case 2:printf("性别改为: ");
getchar();
scanf("%c",&em[j].sex);
//em[j].sex=sex;
break;
case 3:printf("年龄改为: ");
scanf("%d",&em[j].age);
//em[i-1].age=age;
break;
case 4:printf("学历改为: ");
scanf("%s",xueli);
strcpy(em[j].xueli,xueli);
break;
case 5:printf("工资改为: ");
scanf("%d",&em[j].wage);
break;
case 6:printf("住址改为: ");
scanf("%s",addr);
strcpy(em[j].addr,addr);
break;
case 7:printf("电话改为: ");
scanf("%s",tel);
strcpy(em[j].tel,tel);
break;
}
printf("/n");
printf("/n是否确定所修改的信息?/n 是 请按1 ; 不,重新修改 请按2: /n");
scanf("%d",&b);
if(b==1)
save(m)} while(b==2);
}
}
printf("/n浏览修改后的所有职工信息:/n");
printf("/n");
//save(m);
display();
printf("/n继续修改请按1,不再修改请按0/n");
scanf("%d",&t);
switch(t)
{
case 1:modify();break;
case 0:break;
default :break;
}
}
此模块代码较长工作量大,虽然如此但是功能还是不够全面。
7、退出模块:此模块较简单,只是用到exit(0)函数。
注意:用户在使用软件时应先浏览,然后将原有的职工信息全部删除再使用
七、课设总结
通过此次课设设计又将所学的C语言知识巩固个一遍,几乎所有的知识都用到了如:基本的变量,重要的语句,函数等最主要的是加深了对函数、指针、结构体以及文件的认识和理解,学会了更好的应用这些知识来写出一个预期的程序,收获很大。这次课设的题目不是很难,但是要做到功能的全面和严谨是非常不容易的一件事。虽然在老师的指导下完成了这次课设,但是自己还需做更多的类似的题目来提高自己。
参考文献:
[1]. 谭浩强 著.C程序设计(第三版).清华大学出版社,2003
[2]. 姜灵芝 著.C语言课程设计案例精编.清华大学出版社,2008
[3]. 梁旭,谷晓琳,黄明 著.C语言课程设计(第二版).电子工业出版社,2009
[4]. [美] 克尼汉,里奇 著,徐宝文,李志 译.C程序设计语言(第2版·新版).机械工业出版社,2004
[5]. [美] 金 著,吕秀锋,黄倩 译.C语言程序设计——现代方法.人民邮电出版社,2010
[6]. 杨峰 著.妙趣横生的算法(C语言实现).清华大学出版社,2010
[7]. 王娣,安剑,孙秀梅 著.C语言程序开发(范例宝典).人民邮电出版社
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息