计算机软件技术基础课程设计工资管理系统的设计专业版.docx

上传人:b****5 文档编号:6928885 上传时间:2023-01-12 格式:DOCX 页数:51 大小:425.78KB
下载 相关 举报
计算机软件技术基础课程设计工资管理系统的设计专业版.docx_第1页
第1页 / 共51页
计算机软件技术基础课程设计工资管理系统的设计专业版.docx_第2页
第2页 / 共51页
计算机软件技术基础课程设计工资管理系统的设计专业版.docx_第3页
第3页 / 共51页
计算机软件技术基础课程设计工资管理系统的设计专业版.docx_第4页
第4页 / 共51页
计算机软件技术基础课程设计工资管理系统的设计专业版.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

计算机软件技术基础课程设计工资管理系统的设计专业版.docx

《计算机软件技术基础课程设计工资管理系统的设计专业版.docx》由会员分享,可在线阅读,更多相关《计算机软件技术基础课程设计工资管理系统的设计专业版.docx(51页珍藏版)》请在冰豆网上搜索。

计算机软件技术基础课程设计工资管理系统的设计专业版.docx

计算机软件技术基础课程设计工资管理系统的设计专业版

计算机软件技术基础课程设计-工资管理系统的设计【专业版】

(文档可以直接使用,也可根据实际需要修订后使用,可编辑放心下载)

湖南文理学院课程设计报告

 

课程名称:

计算机软件技术基础

系部:

电气与信息工程学院

专业班级:

通信08102班

学号:

学生姓名:

指导教师:

完成时间:

2010-12-28

报告成绩:

评阅意见:

评阅教师日期

 

一.设计要求2

二.设计作用与目的2

三.运行环境及工具软件3

四.系统设计3

1.需求分析3

2.设计分析3

3.具体设计3

(1)模块设计3

(2)流程图4

(3)源程序及注释6

五.系统调试27

1.调试结果27

2.设计中的问题及解决方法29

六.设计心得30

七.参考文献31

 

工资管理系统的设计

一.设计要求

设计编写一个工资管理系统,该软件与实际应用还有很大的距离,但它涵盖了数据库设计的基本内容。

根据实际工作的需要,一般工资管理系统应有以下几个基本功能:

1、启动软件时,进行密码校验。

若出错三次,则自动退出系统。

2、实现简易的提示菜单界面,刚运行时应显示版本信息。

用所学的知识尽量实现良好的、美观的“人机界面”,便于软件的操作使用。

3、要求把所有录入的数据以文件的形式,保存在硬盘上。

4、系统包含以下基本功能:

登陆功能、显示主菜单功能、职工信息输入信息输出、职工信息查询、职工信息修改、工资排序、工资统计、导出数据、导入数据、退出等。

二.设计作用与目的

1、通过这次专题实习,巩固和加深对所学相关知识点的理解。

2、进一步熟悉基本流程控制结构——实现分支的if…else语句、switch语句和实现循环的for、while…、do…while语句、break、continue等。

3、基本数据类型、数组、结构体、自定义类、函数的应用。

4、加强对模块化程序设计和面向对象程序设计的理解。

5、掌握C\C++语言程序设计的基本思想,了解简单的系统分析和

6、了解数据库系统的理论

7、掌握数据库设计的基本方法,熟悉数据库设计的步骤;

8、学习基本数据库编程方法

9、进一步巩固、加深学生所学专业课程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。

10、全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。

11、利用所学知识,开发小型应用系统,掌握运用C语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。

12、对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。

13、掌握面向对象的程序设计方法。

14、进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)、修改程序和程序的测试。

三.运行环境及工具软件

WindowsXP;

TurboC;

四.系统设计

1.需求分析

本次设计的工资管理系统的信息包括:

工号、姓名、基本工资、扣款等信息。

有浏览、查询、录入、编辑、删除等功能。

2.设计分析

根据需求分析文档,初步提出问题的解决方案,以及软件系统的体系结构和数据结构的设计方案并写出书面文档总体设计说明,为下一步进行详细设计做准备。

该系统可以按功能进行模块划分,其系统结构框图如下:

工资管理系统

登陆功能

用户管理

职工信息输入信息输出

职工信息输出

工资职工信息查询

计算

职工信息修改

工资排序

工资统计

导入数据

退出

导出数据

3.具体分析

(1)模块设计

本次设计的模块包括输入模块、输出模块、计算实发工资模块、插入和追加记录模块、删除模块等。

其各模块的分析如下:

a.输入模块

输入模块采用表格形式输入需要创建的数据。

其中包括:

输入职工编号、姓名、基本工资等。

使用的函数和数据描述如下:

voidcreate();/*创建链表*/

charno[11];/*编号*/

charname[15];/*姓名*/

floatjbgz;/*基本工资*/

b.输出模块

将输入的所有数据显示在运行界面,可以显示所有数据记录或者根据输入的编号显示所输编号的一条数据记录。

其中所设计的函数如下:

voidlist();/*显示所有数据*/

voidprint(SALARY*p);/*输出单条记录*/

voiddisplay();/*随意逐条显示*/

c.计算实发工资模块

应发工资=基本工资-扣款;税金=(应发工资-1000)*税率(当应发工资>1000);实发工资=应发工资-税金;

设计的函数有voidcalc();/*计算应发工资*/和floatfax(floatx);

d.插入和追加记录模块

插入位置的确定通过输入节点的编号进行定位,追加记录直接加在所有记录的最后。

设计的函数为:

voidinsert();/*插入*/和voidappend();/*追加*/

e.删除模块

删除一条记录,要删除记录首先要查找记录,所以本模块设计了两个函数:

一个查找函数find(),实现按编号查找的功能;一个是删除查找到的记录delete()。

(2)流程图

 

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

N

N

N

N

N

N

N

N

N

N

N

N

开始

主菜单

选择操作

选择1

选择0

选择3

选择2

选择5

选择4

选择7

选择6

选择9

选择8

选择11

选择10

选择13

选择12

初始化表单

输入数据

显示数据

分类合计

读取文件

退出

计算实发工资

查找记录

插入记录

删除记录

保存文件

追加记录

排序

索引

结束

(3).源程序及注释

#include"stdio.h"/*I/O函数*/

#include"bios.h"/*ROM基本输入输出函数*/

#include"dos.h"/*dos接口函数*/

#include"conio.h"/*屏幕操作函数*/

#include"stdlib.h"/*其它说明*/

#include"string.h"/*字符串函数*/

#include"mem.h"/*内存操作函数*/

#include"ctype.h"/*字符操作函数*/

#include"alloc.h"/*动态地址分配函数*/

/****变量定义*******/

typedefstructz1/*定义数据结构*/

{

charno[11];/*编号*/

charname[15];/*姓名*/

floatjbgz;/*基本工资*/

floatkoukuan;/*扣款*/

floatyfgz;/*应发工资*/

floatsfgz;/*实发工资*/

structz1*prior;/*前驱指针*/

structz1*next;/*后继指针*/

}SALARY;/*结构体类型名*/

structz1*First;/*双链表头指针*/

structz1*Last;/*双链表尾指针*/

/******函数原型*********/

voidinit();/*初始化*/

voidcreate();/*创建链表*/

voidcalc();/*计算应发工资*/

voiddelete();/*删除*/

voidsearch();/*查找*/

voidsave();/*保存文件*/

voidload();/*读取文件*/

voidinsert();/*插入*/

voidappend();/*追加*/

voidsort();/*排序*/

voidindex();/*索引*/

voidtotal();/*分类合计*/

voidlist();/*显示所有数据*/

voidprint(SALARY*p);/*输出单条记录*/

intmenu_select();/*主菜单*/

/*******主函数开始**********/

main()

{

inti;

clrscr();

for(;;)

{

switch(menu_select())/*调用菜单函数返回一个整数值*/

{

case0:

init();break;/*初始化*/

case1:

create();break;/*输入数据创建双链表*/

case2:

list();break;/*显示所有数据*/

case3:

calc();break;/*计算实发工资*/

case4:

search();break;/*查找职工信息数据*/

case5:

delete();break;/*删除记录*/

case6:

insert();break;/*插入记录*/

case7:

append();break;/*追加记录*/

case8:

save();break;/*保存文件*/

case9:

load();break;/*读取文件*/

case10:

sort();break;/*按实发工资升序排序*/

case11:

index();break;/*按职工号索引*/

case12:

total();break;/*按部门求合计*/

case13:

exit(0);/*退出*/

}

}

}

/*菜单函数,函数返回值为整型,代表所选的菜单项*/

menu_select()

{

char*f[]={/*定义菜单字符串数组*/

"**************MENU*************",/*菜单的标题行*/

"0.initlist",/*初始化双链表*/

"1.Enterlist",/*输入数据,创建双链表*/

"2.Listall\n",/*显示所有记录*/

"3.Calcthesalary",/*计算实发工资*/

"4.Searchrecordonname",/*查找记录*/

"5.Deletearecord",/*删除记录*/

"6.Insertrecordtolist",/*插入记录*/

"7.Appendrecordtofile",/*追加记录*/

"8.Savedatatothefile",/*保存文件*/

"9.Loaddatafromthefile",/*读取文件*/

"10.Sortonsfgz",/*排序*/

"11.Indexonnumber",/*索引*/

"12.Totalonnumber",/*分类合计*/

"13.Quit"};/*退出*/

chars[80];

inti;

intkey=0;/*记录所压键值*/

intc=0;

gotoxy(1,25);/*移动光标*/

clrscr();/*清屏*/

textcolor(YELLOW);/*设置文本颜色为黄色*/

textbackground(BLUE);/*设置背景颜色为兰色*/

gotoxy(10,2);

putch(0xda);/*输出左上角边框┏*/

for(i=1;i<44;i++)

putch(0xc4);/*输出上边框水平线*/

putch(0xbf);/*输出右上角边框┓*/

for(i=3;i<22;i++)/*输出左右两边的垂直线*/

{

gotoxy(10,i);putch(0xb3);

gotoxy(54,i);putch(0xb3);

}

gotoxy(10,22);putch(0xc0);/*输出左上角边框┗*/

for(i=1;i<44;i++)

putch(0xc4);/*输出下边框水平线*/

putch(0xd9);/*输出右下角边框┛*/

window(11,3,53,21);/*制作显示菜单的窗口,大小根据菜单条数设计*/

clrscr();/*清屏*/

for(i=0;i<14;i++)

{

gotoxy(10,i+1);

cprintf("%s",f[i]);/*输出菜单项数组*/

}

i=1;

gotoxy(10,2);/*设置默认选项在第一项*/

textbackground(LIGHTGREEN);/*设置背景颜色为浅绿*/

cprintf("%s",f[1]);/*输出菜单项,表示选中*/

gotoxy(10,2);/*移动光标到菜单的第一项*/

while(key!

=13)/*所压键不是回车键时*/

{

while(bioskey

(1)==0);/*查询是否压下了一个键*/

key=bioskey(0);/*返回下一个在键盘压下的键*/

key=key&0xff?

key&0xff:

key>>8;/*对所压的键进行判断*/

gotoxy(10,i+1);

textbackground(BLUE);/*设置背景颜色为蓝色*/

cprintf("%s",f[i]);/*输出菜单项*/

if(key==72)i=i==1?

13:

i-1;/*如压向上光标键↑,i减1,如已到第一行再上移,则到最后一行*/

if(key==80)i=i==13?

1:

i+1;/*如压向下光标键↓,i加1,如已到最后一行再下移,则到第一行*/

gotoxy(10,i+1);/*光标移动i的下一项*/

textbackground(LIGHTGREEN);/*将背景颜色设为浅绿*/

cprintf("%s",f[i]);/*输出菜单项*/

c=i-1;/*给代表菜单选项的整数赋值*/

}

textbackground(BLACK);/*设置背景颜色为黑色*/

window(1,1,80,25);/*恢复原窗口大小*/

returnc;/*返回代表菜单选项的整数值*/

}

/*初始化函数*/

voidinit()

{

First=NULL;

Last=NULL;

}

/*输入数据,创建双链表*/

voidcreate()

{

intx;/*记录行坐标*/

inti;/*记录输入记录数*/

intflag=0;/*做结束标记*/

floattemp;/*定义临时变量*/

SALARY*info,*p;/*定义临时变量*/

if(First!

=NULL)

init();/*如果头指针为空,调用初始化函数*/

p=First;/*从头指针开始*/

for(;;)

{

if(flag==1)

break;/*如果flag=1,结束输入*/

i=0;

x=0;/*确定移动的行坐标*/

clrscr();/*清屏*/

gotoxy(1,3);

printf("*************gongziguanli*************");/*输出标题*/

gotoxy(1,4);

printf("--Enter@end--");/*提示输入@结束*/

gotoxy(1,5);

printf("|------------------------------------|");/*输出表格的起始线*/

gotoxy(1,6);

printf("|no|name|jbgz|");/*输出字段标题,注意空格数*/

for(;;)

{

gotoxy(1,7+x);

printf("|----------|----------------|--------|");/*输出表格的水平线*/

info=(SALARY*)malloc(sizeof(SALARY));/*申请一个记录空间*/

if(!

info)

{

printf("\noutofmemory");/*如没有得到空间,输出内存溢出信息*/

exit(0);/*退出程序*/

}

info->next=NULL;/*新结点的后继为空*/

info->prior=NULL;/*新结点的前驱为空*/

gotoxy(1,8+x);printf("|");/*输出数据间的分割线*/

gotoxy(12,8+x);printf("|");

gotoxy(29,8+x);printf("|");

gotoxy(38,8+x);printf("|");

gotoxy(2,8+x);/*光标到输入编号位置*/

inputs(info->no,10);/*输入编号,并验证长度不超过10*/

if(info->no[0]=='@')

{

flag=1;

break;

}/*编号首字符为@结束输入*/

gotoxy(13,8+x);/*光标到输入姓名位置*/

inputs(info->name,14);/*输入姓名,并验证长度不超过14*/

gotoxy(30,8+x);/*光标到输入基本工资位置*/

scanf("%f",&temp);/*输入基本工资到临时变量*/

info->jbgz=temp;/*基本工资赋值*/

info->koukuan=0;/*初始扣款为0,待计算工资时输入*/

info->sfgz=0;/*初始实发工资为0,待计算工资时计算*/

info->yfgz=0;/*初始应发工资为0,待计算工资时计算*/

if(p==NULL)/*如果p为空,说明输入的是第一个结点*/

{

First=Last=info;/*头指针和尾指针*/

First->prior=NULL;/*头指针的前驱是空*/

Last->next=NULL;/*尾指针的后继是空*/

}

else/*插入的结点不是第一结点,则插入在头结点之前*/

{

info->next=p;/*新结点的后继指向原来的头结点*/

info->prior=p->prior;/*新结点的前驱指向原来的头结点的前驱*/

p->prior=info;/*原来结点的前驱指向新结点*/

}

p=info;/*新结点变为p结点,暂时的头结点*/

First=info;/*新结点变为头结点*/

x+=2;/*因为水平线,将光标下移两行*/

gotoxy(1,8+x);

i++;/*输入记录数加1*/

if(i%9==0)

break;/*输入9个记录,换一页输入*/

}

gotoxy(1,8+x);

}

printf("|----------|----------------|--------|");/*输出结尾水平线*/

}

/*字符串输入和验证函数*/

inputs(char*s,intcount)

{

charp[255];

do{

scanf("%s",p);/*输入字符串*/

if(strlen(p)>count)printf("\ntoolong!

\n");/*进行长度校验,超过count值重输入*/

}while(strlen(p)>count);

strcpy(s,p);/*将输入的字符串拷贝到字符串s中*/

}

/*显示链表*/

voidlist()

{

inti=0,n;/*记录输出行数*/

SALARY*p;/*定义移动指针*/

clrscr();/*清屏*/

p=First;/*从头指针开始*/

while(i%10==0&&p!

=NULL)/*外循环控制换页*/

{

i=0;/*记录一页的输出行数*/

clrscr();/*清屏*/

printf("\n\n\n");/*换行三次*/

printf("*************************************SALARY***********************************\n");/*输出大标题*/

printf("|nO|name|jbgz|koukuan|yfgz|sfgz|\n");/*输出字段标题*/

printf("|----------|---------------|---------|---------|---------|---------|\n");/*输出水平线*/

while(p!

=NULL)/*当p不为空时*/

{

printf("|%-10s|%-15s|%9.2f|%9.2f|%9.2f|%9.2f|\n",

p->no,p->name,p->jbgz,p->koukuan,p->yfgz,p->sfgz);

p=p->next;/*指针后移*/

i++;/*输出行数加1*/

if(i%10==0)

break;/*如果满10行,跳出内循环*/

}

printf("****************************************end***********************************\n");/*输出本页的结束行*/

printf("Pressanykeycongtinue...\n");

getch();/*输出一页暂停一下,压任意键继续*/

}/*返回到外循环,准备下一页的输出*/

}

/*输出指针所指结点信息*/

voidprint(SALARY*p)

{

if(p)/*如果指针不为空,则显示信息*/

{

clrscr();/*清屏*/

printf("\n\n\n");/*换行*/

printf("************************************SALARY************************************\n");/*输出标题信息*/

printf("|no|name|jbgz|koukuan|yfgz|sfgz|\n");/*输出字段标题*/

printf("|----------|---------------|---------|---------|---------|---------|\n");/*输出分割线*/

printf("|%-10s|%-15s|%9.2f|%9.2f|%9.2f|%9.2f|\n",p->no,p->name,

p->jbgz,p->koukuan,p->yfgz,p->sfgz);/*输出结点信息*/

printf("***************************************end

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1