数据结构课程设计说明书
09240102
教师工资管理系统
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2011 年春季学期
算法与数据结构 课程设计
目:学校教师工资管理系统
题
专业班级:
名:
姓
学
号:
指导教师:
绩:
成
1/40
数据结构课程设计说明书
09240102
教师工资管理系统
目 录
摘 要.......................................................................................................................3
前 言.......................................................................................................................3
正 文.......................................................................................................................4
1. 采用类 C 语言定义相关的数据类型...........................................................4
2. 各模块的伪码算法.......................................................................................4
3. 函数的调用关系图.....................................................................................17
4. 调试分析.....................................................................................................17
5. 测试结果.....................................................................................................19
6. 源程序(带注释).....................................................................................22
总 结.....................................................................................................................37
参考文献.................................................................................................................38
致 谢.....................................................................................................................38
附件Ⅰ 冒泡排序源程序代码.............................................................................. 39
2/40
数据结构课程设计说明书
09240102
教师工资管理系统
摘要
数据结构使得许多复杂的数据能以一种很简洁而且方便的结构在计算
机内存中存在并且被计算机随时访问,它为程序设计提供了相当大的帮助。
选择一个好的数据结构类型,对程序的性能,时间复杂度以及代码的编
写都有非常大的帮助。
我们在理论课程结束以后也开始了数据结构课程设计,可以更好的理解
数据结构在实际应用中的作用。
关键词:
数据结构、课程设计、计算机与通信学院、教师工资管理。
前言
经过一个学期的学习, 我已经顺利地完成了数据结构这门课程的理论学习
阶段。通过一个学期的学习,我发现数据结构作为我们软件专业的一门必修课程
是计算机程序设计的重要理论技术基础、是计算机科学的核心课程。
为了巩固并且实践学习到的理论知识,学校在理论教学结束后随即开始了
数据结构课程设计。这是一个检验学习效果并将所学知识灵活运用的实践教学环
节,对巩固所学内容,加深理解有着不可估量的作用,所以我要以端正的态度来
好好完成这次课程设计。
在本次课程设计当中,我的课题是设计“计算机与通信学院教师工资管理
系统”的仿真软件。通过设计任务书中的要求以及介绍,大致确定了主要运用的
知识要点是:线性表、查找表的逻辑结构、存储结构,掌握查找、排序等基本运
算,以及课本中提及的其他相关算法。
经过自己的一番努力以及指导老师的悉心指导,终于完成了此方针软件的
设计,通过这次课程设计,我基本了解并且学习了如何分析研究数据对象的特性、
数据的组织方法、如何选取合适的数据逻辑结构和存储结构。这对以后的学习都
有着很大的帮助。
以下是这次课程设计的详细资料
3/40
数据结构课程设计说明书
09240102
教师工资管理系统
正文
(1)相关数据类型的 C 语言定义:
涉及到的变量有:编号、基本工资、基本津贴、扣税、扣公积金、扣款
总计、实发总计;用到的数据结构类型为双链表;
相关 C 语言定义如下
typedef struct infor
/*定义数据结构*/
{
char code
char name;
double basic
double koukuan;
double spay;
double tax;
double totalpay;
struct infor *prior;
struct infor *next;
/*编号*/
/*姓名*/
/*基本工资*/
/*扣款*/
/*应发工资*/
/*税金*/
/*实发工资*/
/*前驱指针*/
/*后继指针*/
}infor;
/*结构体类型名*/
struct infor *First;
/*双链表头指针*/
struct infor *Last;
首先是由教师个人信息组成的结构体,其中包括了应有的相关变量;
后面是对链表头尾至指针的定义;
(2)各模块的伪码算法
初始化函数:
void init()
{
First=NULL;/*初始化操作*/
4/40
数据结构课程设计说明书
09240102
教师工资管理系统
Last=NULL;
}
自定义一个光标移动函数
gotoxy(x,y)
{
}/能移到坐标 x y 处/
创建数据链表:
void create()
{
int x; /*记录行坐标*/
int i; /*记录输入记录数*/
int flag=0; /*做结束标记*/
float temp;
/*定义临时变量*/
infor *info,*p; /*定义临时变量*/
if(如果头指针为空)
调用初始化函数
p=头指针
for(;;)
{
if(flag==1)
break;
i=0;
x=0;
/*确定移动的行坐标*/
清屏;
gotoxy(1,4);
printf("enter q
to end ");/*提示输入 q 结束*/
gotoxy(1,6);
printf("code
name basic
");/*输出字段标题,注意空格数*/
for(;;)
5/40
数据结构课程设计说明书
09240102
教师工资管理系统
{
申请一个记录空间;
if(!info)
{
}
printf("\CODEut of memory");/*有得到空间*/
exit(0);/*退出程序*/
info->next=NULL;/*新结点的后继为空*/
info->prior=NULL;/*新结点的前驱为空*/
gotoxy(2,8+x);/*光标到输入编号位置*/
inputs(info->code,10);/*输入编号,并验证长度不超过 10*/
if(code 的第一列输入 q)
{
flag=1;
break;
} /*编号首字符为 q 结束输入*/
gotoxy(x1,y1);
/*光标到输入姓名位置*/
inputs(info->name,y2); /*输入姓名,并验证长度不超过 14*/
gotoxy(x3,y3); /*光标到输入基本工资位置*/
scanf 输入基本工资到临时变量;
info->basic=temp; /*基本工资赋值*/
info->koukuan=0; /*初始扣款为 0,待计算工资时输入*/
info->totalpay=0; /*初始实发工资为 0,待计算工资时计算*/
info->tax=0; /*初始税金为 0,待计算工资时计算*/
info->spay=0; /*初始应发工资为 0,待计算工资时计算*/
if(p==NULL);
{
First=Last=info;/*头指针和尾指针*/
First->prior=NULL; /*头指针的前驱是空*/
6/40
数据结构课程设计说明书
09240102
教师工资管理系统
Last->next=NULL; /*尾指针的后继是空*/
}
else /*插入的结点不是第一结点,则插入在头结点之前*/
前驱*/
{
}
info->next=p;/*新结点的后继指向原来的头结点*/
info->prior=p->prior;/*新结点的前驱指向原来的头结点的
p->prior=info;/*原来结点的前驱指向新结点*/
p=info;
/*新结点变为 p 结点,暂时的头结点*/
First=info; /*新结点变为头结点*/
x+=2;
/*因为水平线,将光标下移两行*/
gotoxy(1,i+x)
i++;
if(输入 9 个记录,换一页输入)
break; 换页输入;
}
gotoxy(1,8+x);
}
printf(" \n");/*输出结尾水平线*/
}
inputs(char *s, int count)
{
char p[255];
do{
scanf char;/*输入字符串*/
if(strlen(p)>count)printf("\n too long! \n");/*进行长度
校验,超过 count 值重输入*/
}while(strlen(p)>count);
7/40
数据结构课程设计说明书
09240102
教师工资管理系统
strcpy(s,p); /*将输入的字符串拷贝到字符串 s 中*/
}
输出函数:
void print(infor *p)
{
if(p)
/*如果指针不为空,则显示信息*/
clrscr();
/*清屏*/
printf("\n\n\n");
/*换行*/
printf("|code name
basic
koukuan
spay
tax
totalpay
\n");
printf("|%-10s|%-15s|%9.2f|%9.2f|%9.2f|%9.2f|%9.2f|\n,p->code,p->name,
p->basic,p->koukuan,p->spay,p->tax,p->totalpay);
}
}
查找函数:
infor *find(char *code)
{
{
}
infor *p; /*定义移动指针*/
p=First;
/*从头指针开始*/
while(p!=NULL)
if(!strcmp(code,p->code))
return p; /*比较相等,查找成功,返回指针*/
p=p->next; /*不相等指针后移*/
}
printf("CODEt found\n");
/*没有找到*/
return NULL; /*返回为空指针*/
删除结点函数:
void delete()
8/40