数
结
构
作
业
作业题目: 职工信息理系统
姓 名:
学 号:
班 级: 计算机班
指导教师:
日 期: 2010年X月X日
职工信息理系统
(学院计算机科学系班)
摘 :程序实现职工理系统中常见功 包括建立职工信息 输出职工信息根职工号部门号职工工资进行排序功 整职工表清空功
关键词:职工理 职工理系统 数排序 排序
1 关程序设计引言
着信息技术发展 更情况助计算机交流储存信息确切说计算机程序理庞信息提高信息技术发展 场合计算机样理程序功派场 譬职工信息理言 方便 功全面 通俗易懂理程序必备 点出发 设计出计算机理程序职工理系统 接说明该程序功
2 程序简介
该程序功十方面说明:
1输入:添加职工记录
2输出:输出全部职工记录
3职工号排序:通职工号指针职工记录职工号连接起
4职工号输出:职工号指针输出全部职工记录
5部门号排序:通部门号指针职工记录部门号连接起
6部门号输出:部门号指针输出全部职工记录
7职工工资排序:通职工工资指针职工记录职工工资连接起
8职工工资输出:职工号指针输出全部职工记录
9全清:删职工文件中全部记录
10存储退出:单链表中全部结点存储职工文件中然退出程序运行程
3 实验仪器
1台安装Turbo C 普通学生电脑
4 实验容
利静态链表实现综合算法
5 实验重点
掌握链表常操作
6 程序功实现详解
面详细介绍程序功实现方式代码含义 设计程序时 质量点算法 程序10功 显然应实现相应功10函数 设计时输出部分统函数中实现 面程程序设计中包括面象程序设计般没种职工类型变量 开始建立结构体变量谓职工类型 部分代码:
typedef struct node
{
int nodepnosalary *no职工号depno部门号salary工资数*
char name[maxsize] *职工姓名*
struct node *pno*pdepno*psalary*next *pno职工号指针pdepno部门号指针psalary工资数指针*
}employee
显然 结构体中成员包括职工姓名职工号部门号职工工资指该类型结点指针变量
面介绍实现第功代码:
employee *insert(employee *head)
{
employee *h
if(headNULL)
{
employee *s*h1
h1malloc(sizeof(employee))
smalloc(sizeof(employee))
clrscr()
printf(please input employee's name)
scanf(ss>name)
printf(please input employee's number)
scanf(d&s>no)
printf(please input department's number)
scanf(d&s>depno)
printf(please input employee's wages)
scanf(d&s>salary)
s>pnoNULL
s>pdepnoNULL
s>psalaryNULL
s>nextNULL
h1>pnoNULL
h1>pdepnoNULL
h1>psalaryNULL
h1>nexts
hh1
printf(all done\n)
getch()
}
if(headNULL)
{
employee *s*p*h1
h1head
ph1>next
smalloc(sizeof(employee))
if(p>nextNULL)
{
while(p>nextNULL)
pp>next
clrscr()
printf(please input employee's name)
scanf(ss>name)
printf(please input employee's number)
scanf(d&s>no)
printf(please input department's number)
scanf(d&s>depno)
printf(please input employee's wages)
scanf(d&s>salary)
s>pnoNULL
s>pdepnoNULL
s>psalaryNULL
s>nextNULL
p>nexts
hh1
printf(all done\n)
getch()
}
if(p>nextNULL)
{
clrscr()
printf(please input employee's name)
scanf(ss>name)
printf(please input employee's number)
scanf(d&s>no)
printf(please input department's number)
scanf(d&s>depno)
printf(please input employee's wages)
scanf(d&s>salary)
s>pnoNULL
s>pdepnoNULL
s>psalaryNULL
s>nextNULL
p>nexts
hh1
printf(all done\n)
getch()
}
}
return(h)
}
函数实现功插入职工记录职工表中 函数返回类型设计成前建立结构体类型指针函数 函数参数职工类型头指针变量 main函数中时建立头指针变量 赋空值 调该函数时空指针传插入函数职工表空第次插入职工记录时然传插入函数头指针值空判断新建立结点已结点插入(连接)结点 头指针空 已结点职工记录表中 插节点 职工表中职工记录时 (head>next>nextNULL时)插第结点面 职工表中结点两时插结点面
面说明第二功实现部分:
void output(employee *head)
{
employee *p
if(headNULL)
{
clrscr()
printf(The table is emptyplease insert before\n)
}
else
{
phead>next
if(pNULL)
{
clrscr()
printf(all information of employee\n\n)
printf(employee's name employee's number department's number employee's wages\n)
while(pNULL)
{
printf(\ts\t\td\t\t\td\t\t d\np>namep>nop>depnop>salary)
pp>next
}
}
}
getch()
}
函数功实现职工记录表中记录没记录 输出提示语句提醒者职工表空 空第号结点开始输出直结点(表格形式输出)
面分介绍根职工号部门号职工工资排序函数:
employee *SortByEmployeeNumber(employee *head)
{
employee *p*q*s*h*temp
tempmalloc(sizeof(employee))
hhead
for(shead>next sNULL ss>next)
{
ps
for(qs>next qNULL qq>next)
{
if((p>no)>(q>no))
pq
}
if(ps)
{
temp>nos>no
temp>depnos>depno
temp>salarys>salary
strcpy(temp>names>name)
s>nop>no
s>depnop>depno
s>salaryp>salary
strcpy(s>namep>name)
p>notemp>no
p>depnotemp>depno
p>salarytemp>salary
strcpy(p>nametemp>name)
}
}
clrscr()
printf(all done\n)
getch()
return(h)
}
employee *SortByDepartmentNumber(employee *head)
{
employee *p*q*s*h*temp
tempmalloc(sizeof(employee))
hhead
for(shead>next sNULL ss>next)
{
ps
for(qs>next qNULL qq>next)
{
if((p>depno)>(q>depno))
pq
}
if(ps)
{ temp>nos>no
temp>depnos>depno
temp>salarys>salary
strcpy(temp>names>name)
s>nop>no
s>depnop>depno
s>salaryp>salary
strcpy(s>namep>name)
p>notemp>no
p>depnotemp>depno
p>salarytemp>salary
strcpy(p>nametemp>name)
}
}
clrscr()
printf(all done\n)
getch()
return(h)
}
employee *SortByWages(employee *head)
{
employee *p*q*s*h*temp
tempmalloc(sizeof(employee))
hhead
for(shead>next sNULL ss>next)
{
ps
for(qs>next qNULL qq>next)
{
if((p>salary)>(q>salary))
pq
}
if(ps)
{
temp>nos>no
temp>depnos>depno
temp>salarys>salary
strcpy(temp>names>name)
s>nop>no
s>depnop>depno
s>salaryp>salary
strcpy(s>namep>name)
p>notemp>no
p>depnotemp>depno
p>salarytemp>salary
strcpy(p>nametemp>name)
}
}
clrscr()
printf(all done\n)
getch()
return(h)
}
第根职工号进行职工表中记录进行排序 里说明点 种排序相点职工指针类型函数 参数职工类型头指针 根职工号职工记录表排序函数中采排序算法直接选择排序法 整体两层循环第层负责职工类型指针变量号结点开始结点间循环 意义前定义职工类型指针变量存放号结点址 该类型指针变量存放二号结点址 然较职工号 然址存入第指针变量 程序中p指针 然第二层循环起效直结点止号结点职工号较终结点址存入p指针 然该p指针切信息号位置结点切信息进行交换 p指针终存放号结点址 需交换 接着外层循环起效 二号结点职工号三号结点开始(外层循环作两指针移步)较 重复述操作 直结点止 终实现职工记录表信息职工号排序 根部门号排序根职工工资进行排序样结构 里进行详细说明 整函数中条语句样 根职工号根部门号根职工工资进行较时p指针直存放职工号结点部门号结点职工工资结点址
面讲述删功实现:
employee *DeleteAllInformation()
{
employee *h
hNULL
clrscr()
printf(all done\n)
getch()
return(h)
}
该函数利职工类型指针变量赋予空值 然返回头指针 原存职工记录表置空
程序返回类型空函数 程序开始呈现出画面
void show()
{
clrscr()
printf(*********************************************************************\n)
printf(\n)
printf(welcome to use manage employee's information micro system\n)
printf(\n)
printf( ainsert a information of employee\n)
printf( boutputoutput all information of employee\n)
printf( csort by employee's number\n)
printf( doutput all information by employee's number\n)
printf( esort by department's number\n)
printf( foutput all information by department's number\n)
printf( gsort by employee's wages\n)
printf( houtput all information by employee's wages\n)
printf( idelete all employee's information\n)
printf( jsave\n)
printf( 0exit\n)
printf(*****************************************************************\n)
}
接着实现保存功函数代码:
void save(struct employee *head)
{
FILE *file
employee *p
if((filefopen(d\\职工记录表txtwb))NULL)
printf(can not open file\n)
fprintf(file\r\n) *换行符号写入文件*
fprintf(fileemployee's name employee's number department's number employee's wages\r\n)
for(phead>nextpNULLpp>next)
{
fprintf(file\ts\t\td\t\t\td\t\t d\r\np>namep>nop>depnop>salary) *写入记录*
fprintf(file\r\n) *换行符号写入文件*
}
fclose(file) *关闭文件*
clrscr()
printf(save done\n)
getch()
}
面说明整程序核心main函数 程序main函数开始进行 必须说明main函数:
main()
{
char flag
employee *head
headNULL
show()
scanf(c&flag)
while(flag '0')
{
switch(flag)
{
case 'a' headinsert(head)
show() break
case 'b' output(head)
show() break
case 'c' headSortByEmployeeNumber(head)
show() break
case 'd' output(head)
show() break
case 'e' headSortByDepartmentNumber(head)
show() break
case 'f' output(head)
show() break
case 'g' headSortByWages(head)
show() break
case 'h' output(head)
show() break
case 'i' headDeleteAllInformation()
show() break
case 'j' save(head)
show() break
}
scanf(c&flag)
}
}
显易见 main函数中说职工类型头指针变量外东西 提供选择功switch case语句 函数进行功选择main函数中while循环中switch case语句 利选择函数实现功 程序十功
7 程序运行程详解
程序包括输入职工记录输出全部职工记录根职工号排序输出根部门号排序输出根职工工资排序输出清空职工记录表保存职工记录表生成txt文文档退出等功运行程序会出现图1示窗口中发现说明功根旁边写英文字母进行选择方法输入相应写英文字母回车会进入相应功界面
图1 程序开始运行时界面界面
1 输入职工记录职工记录表中
图1示界面中时候开始运行程序时候想输入职工记录职工记录表中选择界面中第选项(输入a回车)会出现图2示求输入职工基信息窗口面容包括职工姓名职工号码部门号码职工工资参数
图2 输入职工相关参数
发现输入完参数回车键会出现全部参数输入完毕提示信息提示户次输入结束界面中次敲回车键返回图1示界面中返回界面想继续输入职工记录重复述操作进行职工记录输入时候种操作应称作插入记录显易见选项1仅输入职工记录插入职工记录职工记录表中假定已三职工记录输入进便解释部分排序功
2 输出全部职工记录
已输入完毕职工记录进行输入操作方法图1示界面中选择选项二(输入b回车)前输入全部职工记录图3示
图3 输出全部职工记录
发现输入记录表格形式输入窗口中便查阅
值提果职工记录表中什记录没前提进行输出功记录表空然输入记录时会出现图4示窗口提示户现职工记录表空必须先进性输入操作
图4 职工记录表空前提进行输入功
3 根职工号整职工记录表进行排序输出
职工记录表中两记录时根职工号进行整职工记录表排序方法图1示界面中选择选项三(输入c回车)会出现图5示窗口表示职工记录表排序完毕
图5 职工记录表进行排序完毕时候出现窗口
想查刚刚排序职工记录表窗口中敲回车键返回界面界面中选择第四选项(输入d回车)会出现图6示窗口
图6 根职工号排序输出窗口
前输出记录表相较(图3图6进行较)发现职工记录表职工号码排序(升序)
4 根部门号整职工记录表进行排序输出
职工记录表中两记录时根职工记录表中职工参数项部门号整职工记录表进行排序方法图1示界面中选择选项五(输入e回车)会出现图5示窗口表示根部门号排序已完毕想查刚刚排序记录表界面中选择选项六(输入f回车)时会出现图7示窗口
图7 根部门号排序输出窗口
前记录表进行较(图6图7进行较)发现职工记录表已根部门号排序
5 根职工工资整职工记录表进行排序输出
职工记录表中两记录时根职工参数项职工工资整职工记录表排序方法图1示界面中选择选项六(输入g回车)会出现图5示界面 想查已排序职工记录表图1示职工记录表中选择选项八(输入h回车)会出现图8示窗口
图8 根部门号排序输出窗口
前次记录较发现(图7图8进行较)职工记录表中记录已根职工工资排序
6 清空职工记录表
想重新开始输入职工记录者前记录需想重新开始输入记录时候清空职工记录表功方法程序界面中选择选项九(输入i回车)会出现图5示窗口表示职工记录表已清空界面中想返回界面敲次回车键时候(职工记录表已清空)选择选项二输入全部职工记录会出现图4示窗口提示职工记录表空必须先输入记录进行
7 保存已记录生成txt文文档文件
程序仅实现输入输出排序(根项目)删等功已记录保存起便 实现保存功方法图1示界面中选择选项十(输入j回车)会出现图9示窗口提示保存成功
图9 保存职工记录表成功(已生成职工记录表)
保存成txt文文档文件位置运行该程序微机中D驱动器根目录中功编写程序时已规定关保存位置代码:
if((filefopen(d\\职工记录表txtwb))NULL)
printf(can not open file\n)
发现保存成txt文文档文件名编写程序时定D盘根目录中找找职工记录表txt文件开会出现图10示窗口
图10 生成txt文文档
8 退出程序 图1示界面中选择选项十(输入0回车)会退出程序
8 程序源代码(C语言编写)
#include
#define maxsize 20
typedef struct node
{
int nodepnosalary *no职工号depno部门号salary工资数*
char name[maxsize] *职工姓名*
struct node *pno*pdepno*psalary*next *pno职工号指针pdepno部门号指针psalary工资数指针*
}employee
employee *insert(employee *head)
{
employee *h
if(headNULL)
{
employee *s*h1
h1malloc(sizeof(employee))
smalloc(sizeof(employee))
clrscr()
printf(please input employee's name)
scanf(ss>name)
printf(please input employee's number)
scanf(d&s>no)
printf(please input department's number)
scanf(d&s>depno)
printf(please input employee's wages)
scanf(d&s>salary)
s>pnoNULL
s>pdepnoNULL
s>psalaryNULL
s>nextNULL
h1>pnoNULL
h1>pdepnoNULL
h1>psalaryNULL
h1>nexts
hh1
printf(all done\n)
getch()
}
if(headNULL)
{
employee *s*p*h1
h1head
ph1>next
smalloc(sizeof(employee))
if(p>nextNULL)
{
while(p>nextNULL)
pp>next
clrscr()
printf(please input employee's name)
scanf(ss>name)
printf(please input employee's number)
scanf(d&s>no)
printf(please input department's number)
scanf(d&s>depno)
printf(please input employee's wages)
scanf(d&s>salary)
s>pnoNULL
s>pdepnoNULL
s>psalaryNULL
s>nextNULL
p>nexts
hh1
printf(all done\n)
getch()
}
if(p>nextNULL)
{
clrscr()
printf(please input employee's name)
scanf(ss>name)
printf(please input employee's number)
scanf(d&s>no)
printf(please input department's number)
scanf(d&s>depno)
printf(please input employee's wages)
scanf(d&s>salary)
s>pnoNULL
s>pdepnoNULL
s>psalaryNULL
s>nextNULL
p>nexts
hh1
printf(all done\n)
getch()
}
}
return(h)
}
void output(employee *head)
{
employee *p
if(headNULL)
{
clrscr()
printf(The table is emptyplease insert before\n)
}
else
{
phead>next
if(pNULL)
{
clrscr()
printf(all information of employee\n\n)
printf(employee's name employee's number department's number employee's wages\n)
while(pNULL)
{
printf(\ts\t\td\t\t\td\t\t d\np>namep>nop>depnop>salary)
pp>next
}
}
}
getch()
}
employee *SortByEmployeeNumber(employee *head)
{
employee *p*q*s*h*temp
tempmalloc(sizeof(employee))
hhead
for(shead>next sNULL ss>next)
{
ps
for(qs>next qNULL qq>next)
{
if((p>no)>(q>no))
pq
}
if(ps)
{
temp>nos>no
temp>depnos>depno
temp>salarys>salary
strcpy(temp>names>name)
s>nop>no
s>depnop>depno
s>salaryp>salary
strcpy(s>namep>name)
p>notemp>no
p>depnotemp>depno
p>salarytemp>salary
strcpy(p>nametemp>name)
}
}
clrscr()
printf(all done\n)
getch()
return(h)
}
employee *SortByDepartmentNumber(employee *head)
{
employee *p*q*s*h*temp
tempmalloc(sizeof(employee))
hhead
for(shead>next sNULL ss>next)
{
ps
for(qs>next qNULL qq>next)
{
if((p>depno)>(q>depno))
pq
}
if(ps)
{
temp>nos>no
temp>depnos>depno
temp>salarys>salary
strcpy(temp>names>name)
s>nop>no
s>depnop>depno
s>salaryp>salary
strcpy(s>namep>name)
p>notemp>no
p>depnotemp>depno
p>salarytemp>salary
strcpy(p>nametemp>name)
}
}
clrscr()
printf(all done\n)
getch()
return(h)
}
employee *SortByWages(employee *head)
{
employee *p*q*s*h*temp
tempmalloc(sizeof(employee))
hhead
for(shead>next sNULL ss>next)
{
ps
for(qs>next qNULL qq>next)
{
if((p>salary)>(q>salary))
pq
}
if(ps)
{
temp>nos>no
temp>depnos>depno
temp>salarys>salary
strcpy(temp>names>name)
s>nop>no
s>depnop>depno
s>salaryp>salary
strcpy(s>namep>name)
p>notemp>no
p>depnotemp>depno
p>salarytemp>salary
strcpy(p>nametemp>name)
}
}
clrscr()
printf(all done\n)
getch()
return(h)
}
employee *DeleteAllInformation()
{
employee *h
hNULL
clrscr()
printf(all done\n)
getch()
return(h)
}
void show()
{
clrscr()
printf(********************************************************************************\n)
printf(\n)
printf( welcome to use manage employee's information micro system\n)
printf(\n)
printf( ainsert a information of employee\n)
printf( boutputoutput all information of employee\n)
printf( csort by employee's number\n)
printf( doutput all information by employee's number\n)
printf( esort by department's number\n)
printf( foutput all information by department's number\n)
printf( gsort by employee's wages\n)
printf( houtput all information by employee's wages\n)
printf( idelete all employee's information\n)
printf( jsave\n)
printf( 0exit\n)
printf(********************************************************************************\n)
}
void save(struct employee *head)
{
FILE *file
employee *p
if((filefopen(d\\职工记录表txtwb))NULL) *开文件判断开否正常*
printf(can not open file\n)
fprintf(file\r\n) *换行符号写入文件*
fprintf(fileemployee's name employee's number department's number employee's wages\r\n)
for(phead>nextpNULLpp>next)
{
fprintf(file\ts\t\td\t\t\td\t\t d\r\np>namep>nop>depnop>salary)*写入记录*
fprintf(file\r\n) *换行符号写入文件*
}
fclose(file) *关闭文件*
clrscr()
printf(save done\n)
getch()
}
main()
{
char flag
employee *head
headNULL
show()
scanf(c&flag)
while(flag '0')
{
switch(flag)
{
case 'a' headinsert(head)
show() break
case 'b' output(head)
show() break
case 'c' headSortByEmployeeNumber(head)
show() break
case 'd' output(head)
show() break
case 'e' headSortByDepartmentNumber(head)
show() break
case 'f' output(head)
show() break
case 'g' headSortByWages(head)
show() break
case 'h' output(head)
show() break
case 'i' headDeleteAllInformation()
show() break
case 'j' save(head)
show() break
}
scanf(c&flag)
}
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档