C语言职工信息管理系统设计精选.docx

上传人:b****6 文档编号:6567029 上传时间:2023-01-08 格式:DOCX 页数:47 大小:339.94KB
下载 相关 举报
C语言职工信息管理系统设计精选.docx_第1页
第1页 / 共47页
C语言职工信息管理系统设计精选.docx_第2页
第2页 / 共47页
C语言职工信息管理系统设计精选.docx_第3页
第3页 / 共47页
C语言职工信息管理系统设计精选.docx_第4页
第4页 / 共47页
C语言职工信息管理系统设计精选.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

C语言职工信息管理系统设计精选.docx

《C语言职工信息管理系统设计精选.docx》由会员分享,可在线阅读,更多相关《C语言职工信息管理系统设计精选.docx(47页珍藏版)》请在冰豆网上搜索。

C语言职工信息管理系统设计精选.docx

C语言职工信息管理系统设计精选

湖北医药学院

信息管理与信息系统专业

C程序设计--设计报告

题目:

职工信息管理系统

班级:

学号:

姓名:

成绩:

前言

在理论学习和基础实验的基础上,开发规模较大的程序,掌握应用计算机解决实际问题的基本方法,熟悉C程序开发的全过程。

本任务是根据给定的数据和程序,应用单向链表处理一个小班学生的信息。

通过整个程序开发的过程,提高综合应用C语言的能力编程和调试能力,为学习软件专业创建较扎实的理论基础和实践基础。

一系统功能和原始数据

1系统功能

A.建立学生信息表,录入10名学生的信息,并将结果保存在文件student1.txt中

B.显示所有学生信息

C.给定某学生的学号,删除该学生的信息

D.添加一名学生的信息,将其插入到相应位置,使整个学生信息表按学号有序

E.给定某学生的学号,修改该学生的信息

F.按姓名查询学生信息

G.按入学成绩对学生的信息进行排序

H.计算并显示学生入学平均成绩,显示入学成绩最高分和最低分的学生信息

I.将最后的学生信息存入文件student2.txt中

说明:

1.学生信息数据项:

学号姓名性别年龄院系入学成绩

2.录入学生信息时按学号由小到大的顺序录入

3.系统功能使用结构数组和单向链表两种方法实现

工资管理系统功能模块图

2.原始数据

工号

姓名

性别

部门

职位

工资

100

米砂

公管学院

学生

500

101

米砾

公管学院

学生

500

102

罗斯

公管学院

学生

500

103

张满

公管学院

学生

500

104

林磊

公管学院

学生

500

105

胡水

公管学院

学生

500

106

王源

公管学院

学生

500

107

李君

公管学院

学生

500

108

张清

公管学院

学生

500

109

万羽

公管学院

学生

500

3.数据结构

本程序定义了结构体emplyee,用于存放职工的基本信息和工资信息。

typedefstructemployee/*标记为employee*/

{

charnum[10];

charname[15];

charsex;

char

char

intgz;

}ZGGZ

其各字段的值的含义如下。

num[10]:

保存职工编号

name[15]:

保存职工姓名

sex:

保存职工性别

保存职工部门

保存职工职称

gz:

保存职工工资

二程序设计

1建立职工信息结构体

(1)函数原型功能和形参说明

1)printheader()

函数原型:

voidprintheader()

printheader()函数用于在以表格形式显示记录时,打印输出表头信息。

2)printdata()

函数原型:

voidprintdata(ZGGZpp)

printdata()函数用于以表格显示的方式,打印输出单个数组元素pp中的记录信息。

3)Disp()

函数原型:

voidDisp(ZGGZtp[],intn)

Disp()函数用于显示tp数组中存储的n条记录,内容为emplyee结构中定义的内容。

4)numberinput()

函数原型:

floatnumberinput(char*notice)

numberinput()函数用于输入数值型数据,notice用于保存printf()中输出的提示信息。

该函数返回用户输入的浮点类型数据值。

5)Stringinput()

函数原型:

voidStringinput(char*t,intlens,char*notice)

Stringinput()函数用于输入字符串,并进行字符串长度验证(长度

notice用于保存printf()中输出的信息。

6)Locate()

函数原型:

intLocate(ZGGZtp[],intn,charfindmess[],charnameornum[])

Locate()函数用于定位数组中符合要求的元素,并返回该数组元素的下标值。

参数findmess[]保存要查找的具体内容,nameornum[]保存按什么字段在数组tp中查找。

7)Add()

函数原型:

intAdd(ZGGZtp[],intn)

Add()函数用于在数组tp中增加工资记录元素,并返回数组中的当前记录数。

8)Qur()

函数原型:

voidQur(ZGGZtp[],intn)

Qur()函数用于在数组tp中按职工编号或姓名查找满足条件的记录,并显示出来。

9)Del()

函数原型:

intDel(ZGGZtp[],intn)

Del()函数用于先在数组tp中找到满足条件的记录,然后删除该记录。

10)Modify()

函数原型:

voidModify(ZGGZtp[],intn)

Modify()函数用于在数组tp中修改记录元素。

11)Insert()

函数原型:

intInsert(ZGGZtp[],intn)

Insert()函数用于在数组tp中插入记录,并返回数组中的当前记录数。

12)Tongji()

函数原型:

voidTongji(ZGGZtp[],intn)

Tongji()函数用于在数组tp中完成记录的统计工作,统计该公司职工工资的整体分布情况。

13)Sort()

函数原型:

voidSort(ZGGZtp[],intn)

Sort()函数用于在数组tp中完成利用冒泡排序算法实现数组的按实发工资字段的降序排序。

14)save()

函数原型:

voidSave(ZGGZtp[],intn)

Save()函数用于将保存职工工资的数组tp中的n个元素写入磁盘的数据文件中。

15)主函数main()

Main()是整个工资管理系统控制部分

(2)程序清单

#inclu#include

#include

#include

structemployee

{

charnum[10];

charname[15];

charsex[5];

chardepartment[30];

charfunction[32];

intwage;

};

intreademployeest[]);

voidmenu();

voidwriteemployeest[]);

voidadd();

voidselect();//查看职工所有信息

voidnamequery();//按姓名查询

voidnumdel();//按工号删除

voidtongji();//统计

voidsort();//排序

voidnummodify();//按工号修改职工信息

voidsave();//保存信息

voidfh();//返回主菜单

structemployeest[300];//这个数组用来保存所有的职工信息和文件里面的一致

intNumber=0;//记录总的职工人数也就是数组/文件里面的职工人数

voidmain()

{

intchoose=0;

FILE*fp=NULL;

charyesorno;

if((fp=fopen("student1.txt","rb+"))==NULL)

{

printf("\n=========>提示:

文件不存在,是否要创建一个?

(y/n)\n");

scanf("%c",&yesorno);if(yesorno=='y'||yesorno=='Y')

{

//这里仅为了建立文件

fp=fopen("student1.txt","wb+");

fclose(fp);//关闭fp所指的文件,释放文件缓冲区

}

else

exit(0);

}

else

{

Number=read);//要是文件已经有数据将数据初始化到数组中

}

system("cls");

while(true)

{

menu();

printf("\t\t====>请选择:

");

scanf("%d",&choose);

system("cls");

switch(choose)

{

case0:

exit(0);//退出

break;

case1:

add();

fh();//增加职工信息

break;

case2:

select();

fh();//查看职工信息

break;

case3:

namequery();

fh();//查找

break;

case4:

numdel();

fh();//删除

break;

case5:

tongji();

fh();//统计

break;

case6:

sort();

fh();//排序

break;

case7:

nummodify();

fh();//修改后返回

break;

case8:

save();

fh();//保存

break;

default:

break;

}

fflush(stdin);

getchar();

system("cls");

}

}

voidsave()

{

printf("\t=====程序在运行时已自动保存.....\n");

}

voidfh()

{

printf("\t===>按Enter键返回主菜单\n");

}

voidnummodify()//修改职工信息

{

FILE*fp=NULL;

charxh[60];

inti=0;

intchangeIndex=0;//changeIndex改变标记

intindex=0;

printf("请输入要修改的职工编号:

");

scanf("%s",xh);

for(i=0;i

{

if(strcmp(xh,st[i].num)==0)//比较输入工号和数组中已有工号

{

changeIndex=i;//保存要修改的人的下标

break;

}

}

printf("\t工号\t姓名\t性别\t部门\t职能\t工资\n");

printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",st[changeIndex].num,st[changeIndex].name,st[changeIndex].sex,st[changeIndex].department,st[changeIndex].function,st[changeIndex].wage);

printf("请重新输入该职工信息");

printf("工号:

");

scanf("%s",st[changeIndex].num);

printf("姓名:

");

scanf("%s",st[changeIndex].name);

printf("性别:

");

scanf("%s",st[changeIndex].sex);

printf("部门:

");

scanf("%s",st[changeIndex].department);

printf("职能:

");

scanf("%s",st[changeIndex].function);

printf("工资:

");

scanf("%d",&st[changeIndex].wage);

//信息修改后重新更新文件里面的数据以保持数据一致性

fp=fopen("student1.txt","wb+");

for(i=0;i

{

fwrite(&st[i],sizeof(structstudent),1,fp);//把ptr所指向n*size个字节输入到fp所指向的文件中

}

fclose(fp);

printf("\t=======>修改成功\n");

}

voidsort()//排序

{

structstudentt;

intwantNUmber=0;

inti=0;

intj=0;

intk=0;

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(st[j].wage>st[k].wage)

k=j;

}

if(k!

=i)

{

t=st[i];

st[i]=st[k];

st[k]=t;

}

}

printf("你想输出前几名的成绩:

");

scanf("%d",&wantNUmber);

if(wantNUmber>Number)

{

wantNUmber=Number;

}

printf("\t工号\t姓名\t性别\t部门\t职能\t工资\n");

for(i=0;i

{

printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",st[i].num,st[i].name,st[i].sex,st[i].department,st[i].function,st[i].wage);

}

}

voidtongji()//统计

{

inti,m,k,max,min;

doublesum=0.0;

for(i=0;i

{

sum+=st[i].wage;

}

printf("总工资为:

%f\n",sum);

printf("平均工资为:

%f\n",sum/Number);

i=0;m=0;max=0;

max=st[m].wage;

for(i=1;i

{

if(st[i].wage>max)

m=i;

max=st[m].wage;

}

printf("最高工资为:

%d\n",max);

printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",st[m].num,st[m].name,st[m].sex,st[m].department,st[m].function,st[m].wage);

i=0;k=0;min=0;

min=st[0].wage;

for(i=1;i

{

if(st[i].wage

k=i;

min=st[k].wage;

}

printf("最底工资分:

%d\n",min);

printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",st[k].num,st[k].name,st[k].sex,st[k].department,st[k].function,st[k].wage);

}

voidnumdel()//按工号删除

{

FILE*fp=NULL;

charxh[60];

inti=0;

intj=0;

printf("请输入要删除的职工工号:

");

scanf("%s",xh);

for(i=0;i

{

if(strcmp(xh,st[i].num)==0)//如果查找到就删除

{

for(j=i;j

{

st[j]=st[j+1];

}

Number;

}

}

//将剩余数据写入文件重新一写的方式打开文件把以前的数据擦除了

fp=fopen("student1.dat","wb");

for(i=0;i

{

fwrite(&st[i],sizeof(structstudent),1,fp);

}

fclose(fp);

printf("删除成功;\n");

}

voidnamequery()//按姓名查找

{

charname[20];

inti=0;

printf("请输入要查找职工姓名:

");

scanf("%s",name);

system("cls");

printf("\t工号\t姓名\t性别\t部门\t职能\t工资\n");

for(i=0;i

{

if(strcmp(name,st[i].name)==0)

{

printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",st[i].num,st[i].name,st[i].sex,st[i].department,st[i].function,st[i].wage);

}

}

}

voidselect()//查看职工

{

inti=0;

printf("以下是全部职工信息\n");

printf("\t工号\t姓名\t性别\t部门\t职能\t工资\n");

for(i=0;i

{

printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",st[i].num,st[i].name,st[i].sex,st[i].department,st[i].function,st[i].wage);

}

}

voidadd()//增加职工

{

intnumberTemp=0;

inti=0;

structstudenttemp;//临时保存信息

printf("请输入要增加职工个数:

");

scanf("%d",&numberTemp);

for(i=0;i

{

printf("输入%d个职工信息\n",i+1);

printf("工号:

");

scanf("%s",temp.num);

printf("姓名:

");

scanf("%s",temp.name);

printf("性别:

");

scanf("%s",temp.sex);

printf("部门:

");

scanf("%s",temp.department);

printf("职能:

");

scanf("%s",temp.function);

printf("工资:

");

scanf("%d",&temp.wage);

st[Number++]=temp;//将刚添加的写入到数组

write);//将刚添加的写入到文件

}

printf("添加成功\n");

}

voidwritestudent*st)

{

FILE*fp=NULL;

fp=fopen("student1.txt","rb+");

fwrite(st,sizeof(structstudent),1,fp);

fclose(fp);

}

intreadstudentst[])

{

FILE*fp=NULL;

inti=0;

fp=fopen("student1.txt","rb");

while(fread(&st[i],sizeof(structstudent),1,fp))

i++;

fclose(fp);

returni;

}

voidmenu()

{

printf("\t***********************************************************************\n");

printf("\t**\n");

printf("\t*职工信息管理系统结构体数组实现*\n");

printf("\t**\n");

printf("\t*[1]增加职工信息[2]查看职工信息*\n");

printf("\t*[3]查找职工信息[4]删除职工信息*\n");

printf("\t*[5]平均工资,最高工资,最底工资[6]工资排列*\n");

printf("\t*[7]修改职工信息[8]保存数据*\n");

printf("\t*[0]退出系统*\n");

printf("\t**\n");

printf("\t***********************************************************************\n");

}

(3)运行结果

}}}

(3

主界面

增加职工信息

查看职工信息

查找职工信息

删除职工信息

平均工资

修改职工信息

保存数据

2)建立职工信息单链表

(1)函数原型功能和形参说明

(2)程序清单

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

intsaveflag=0;/*是否需要存盘的标志变量*/

structemployee

{

charname[15];/*职工姓名*/

charnum[10];/*职工工号*/

charxb[4];/*职工性别*/

charbm[10];/*部门*/

charzc[10];/*工号职称*/

floatgz;/*工资*/

intmingci;/*名次*/

};

typedefstructnode

{

structemployeedata;

structnode*next;

}Node,*Link;

//Linkl(注意是:

字母l不是数字1)

voidadd(Linkl);

voiddisp(Linkl);//查看职工所有信息

voiddel(Linkl);//删除功能

Node*Locate(Linkl,charfindmess[],charnameornum[]);

voidQur(Linkl);//查询功能

voidTongji(Linkl);//统计

voidSort(Linkl);//排序

voidModify(Linkl);//修改功能

voidSave(Linkl);//保存功能

voidprinte(Node*p);//本函数用于打印链表中某个节点的数据内容*/

//以下4个函数用于输出中文标题

voidprintstart();

voidWrong();

voidNofind();

voidprintc();

voidmenu()

{printf("\t*****************************************************************\n");

printf("\t**\n");

printf("\t*职工信息管理系统单链表实现*\n");

printf("\t**\n");printf("\t*[1]增加职工信息[2]删除职工信息*\n");

printf("\t*[3]查询职工信息[4]修改

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

当前位置:首页 > 幼儿教育

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

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