您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > C语言职工信息管理系统课程设计
湖北医药学院信息管理与信息系统专业《C程序设计》课程设计报告题目:职工信息管理系统班级:学号:姓名:成绩:前言在理论学习和基础实验的基础上,开发规模较大的程序,掌握应用计算机解决实际问题的基本方法,熟悉C程序开发的全过程。本任务是根据给定的数据和程序,应用单向链表处理一个小班学生的信息。通过整个程序开发的过程,提高综合应用C语言的能力、编程和调试能力,为学习软件专业课程创建较扎实的理论基础和实践基础。一、系统功能和原始数据1、系统功能A.建立学生信息表,录入10名学生的信息,并将结果保存在文件student1.txt中B.显示所有学生信息C.给定某学生的学号,删除该学生的信息D.添加一名学生的信息,将其插入到相应位置,使整个学生信息表按学号有序E.给定某学生的学号,修改该学生的信息F.按姓名查询学生信息G.按入学成绩对学生的信息进行排序H.计算并显示学生入学平均成绩,显示入学成绩最高分和最低分的学生信息I.将最后的学生信息存入文件student2.txt中说明:1.学生信息数据项:学号、姓名、性别、年龄、院系、入学成绩2.录入学生信息时按学号由小到大的顺序录入3.系统功能使用结构数组和单向链表两种方法实现输出记录模块工资管理系统输入记录模块查询记录模块更新记录模块统计记录模块键盘出入文件读入按姓名查询显示所有信息删除记录修改记录排序模块插入记录统计员工数和工资输出到屏幕输出到文件工资管理系统功能模块图2.原始数据工号姓名性别部门职位工资100米砂女公管学院学生500101米砾男公管学院学生500102罗斯女公管学院学生500103张满男公管学院学生500104林磊男公管学院学生500开始以可读写的方式打开一个数据文件将此文件的内容读出,并存入一个新的结构体类型的数组中调用menu()菜单函数进入while(1)主循环输入0~9中的一数值,选择相应操作输入是否为0判断键值,调用相应函数,完成相应功能是否已对修改进行了存盘调用save()函数,进行写数据文件操作结束3.数据结构本程序定义了结构体emplyee,用于存放职工的基本信息和工资信息。typedefstructemployee/*标记为employee*/{charnum[10];charname[15];charsex;charcharintgz;}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)105胡水女公管学院学生500106王源女公管学院学生500107李君男公管学院学生500108张清女公管学院学生500109万羽女公管学院学生500Stringinput()函数用于输入字符串,并进行字符串长度验证(长度lens),t用于保存输入的字符串,因为是以指针形式传递的,所以t相当于该函数的返回值。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#includestdio.h#includestdlib.h#includestring.hstructemployee{charnum[10];charname[15];charsex[5];chardepartment[30];charfunction[32];intwage;};intread_file(structemployeest[]);voidmenu();voidwrite_file(structemployeest[]);voidadd();voidselect();//查看职工所有信息voidname_query();//按姓名查询voidnum_del();//按工号删除voidtongji();//统计voidsort();//排序voidnum_modify();//按工号修改职工信息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所指的文件,释放文件缓冲区}elseexit(0);}else{Number=read_file(st);//要是文件已经有数据将数据初始化到数组中}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:name_query();fh();//查找break;case4:num_del();fh();//删除break;case5:tongji();fh();//统计break;case6:sort();fh();//排序break;case7:num_modify();fh();//修改后返回break;case8:save();fh();//保存break;default:break;}fflush(stdin);getchar();system(cls);}}voidsave(){printf(\t=====程序在运行时已自动保存.....\n);}voidfh(){printf(\t===按Enter键返回主菜单\n);}voidnum_modify()//修改职工信息{FILE*fp=NULL;charxh[60];inti=0;intchangeIndex=0;//changeIndex改变标记intindex=0;printf(请输入要修改的职工编号:);scanf(%s,xh);for(i=0;iNumber;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;iNumber;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;iNumber-1;i++){k=i;for(j=i+1;jNumber;j++){if(st[j].wagest[k].wage)k=j;}if(k!=i){t=st[i];st[i]=st[k];st[k]=t;}}printf(你想输出前几名的成绩:);scanf(%d,&wantNUmber);if(wantNUmberNumber){wantNUmber=Number;}printf(\t工号\t姓名
本文标题:C语言职工信息管理系统课程设计
链接地址:https://www.777doc.com/doc-3970500 .html