C语言课程设计——职工信息管理系统设计_第1页
C语言课程设计——职工信息管理系统设计_第2页
C语言课程设计——职工信息管理系统设计_第3页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言课程设计题目及要求职工信息包括职工号、性别、年龄、学历、工资、住址、等职工号不重复试设计一职工信息管理系统,使之能提供以下功能:1、职工信息录入功能职工信息用文件保存。2、职工信息浏览功能。3、查询功能:可以按“职工号”、“”、“工资”等方式查询记录;如果查询信息不存在,显示没有找到信息;4、删除功能:可以根据职工号或删除一条已经存在的职工信息;5、排序功能:能对、年龄、工资进行排序,并显示;6、修改功能:改变记录项的一个或多个届性,并用新的记录项覆盖已经存在的记录项;7、数据存、取:数据以文件形式存储在磁盘上,因此在程序运行中需要对文件进行读取操作。编程人员可以根据实际需要自己定义文件

2、的存储格式,在数据读写时必须精确定位,以免破坏文件的正确性。除此之外,程序中还要不停处理用户的输入,对输入数据的容错性进行检查,可以保证数据的合法性,防止恶意和非恶意的操作对用户数据的破坏。8、系统以菜单方式工作。1. 设计目的在今天这个高速信息时代,许多繁杂的办公事务都由电脑代劳,例如职工信息管理等重复劳动越来越需要电脑来处理。本系统就是为提高企业管理职工信息的效率而设计的,现在职工信息管理系统发挥无可取代的作用。职工信息管理系统是一个可以用来进行职工工号、等自然信息以及各项工资构成进行录入、查询、修改、删除、增加和排序浏览等操作的应用软件。2. 设计的总体思想本系统是用VisualC进行设

3、计与开发,总体思想是结构化、模块化的程序设计。由于主要实现的是管理系统的增、删、改、查和排序等功能,因此应用到程序设计中的基本控制结构,如循环和选择,还使用到C语言最具特色的语言成分一一指针,高效地使用数组、字符串和结构体,采用经典的排序方法一一冒泡法进行排序,并且包含对文件的读、写等基本操作。3. 功能模块描述职工信息管理系统是为企业进行职工信息管理提供辅助而设计的,需要为用户提供一个简单的人机界面以便操作,各功能模块如下。1)登录模块:根据输入的登录密码判断是否允许该用户使用本系统,输入密码正确才能进入管理界面,管理职工信息。2)创建模块:当第一次使用本系统时,根据提示输入职工的工号、性别

4、、年龄、学历、职位、工资、和住址,可一次性输入多条职工的信息记录。浏览模块:可以浏览经输入、修改、删除、添加、排序、读取后的职工信息。3)查询模块:分为根据工号、工资查询的四个具体需求,分别提示管理员要查询的职工信息的的工号、或工资。4)修改模块:分为根据工号、修改的两个具体需求,分别提示管理员要修改的职工信息的工号和,如果有对应职工的信息记录存在,则逐项列出对应职工的信息。5)删除模块:分为根据工号、删除的两个具体需求,分别提示管理员要删除的职工信息的工号和,如果有则删除此职工对应的信息记录。6)添加模块:可在原有职工信息记录的基础上增加新的职工信息记录,并保存至磁盘中。7)排序模块:分为根

5、据、年龄、工资排序的三个具体需求,分别提示管理员选择排序的方式。8)保存模块:将2)3)4)5)6)7)8)模块中改动的数据保存至文件中,以便进行管理、查找和备份。9)读取模块:将文件中的数据读取至内存中。10)概要设计系统模块结构图根据模块功能描述,职工信息系统可以分为11个模块,系统模块结构如图1所示。职工信息管理系统主程序模块图1系统模块结构图5.详细设计数据结构设计本程序定义结构体staffinfo,用于存放职工的相关信息。定义的结构体如下每个变量后面/*/中的内容为各个变量的含义:structstaffinfo(charnum10;/*工号*/charname9;/*/charsex

6、3;/*性别*/charage3;/*年龄*/charedu5;/*学历*/charrole5;/*职位*/charsalary6;/*工资*/chartel16;/*/charaddr30;/*住址*/staN;由于工号、住址等信息是用来描述职工这个有机整体,为了表示这些字段不是孤立的,而是共同描述一个完整的事物,因此用结构体来实现。各函数说明voidgotoxy(intx,inty)功能:用于在屏幕上定位,其中整型数x代表列数,整型数y代表行数,其中0<x<80,0vy,0,0代表左上角。voidshowtable1()voidshowtable2()功能:分别打印表头与表尾。

7、voidenter()功能:进入系统登录界面,验证管理员输入的密码。输入:登录密码。处理:接收管理员输入的密码,存放到相应变量中进行判断。 判断密码是否正确,如果相符,则进入主菜单。 如果不相符,则提示用户重新输入。intfind(charstr30,intt)功能:查找指定记录,str30表示需管理员输入的职工的某一项信息,t表示通过哪一项来查找,例如通过工号、来查找。假设找到与输入的信息相同的记录,则返回找到的记录号,假设找不到就返回-1。输入:职工信息的某一项和想查找的途径。处理:接收管理员输入的职工信息与查找方式,并存入相应的变量中。 将内存中的数据与输入信息逐条比对,直到找到相同的记

8、录,返回找到的记录号。 假设没找到该职工的记录,就返回-1。voidcreat()功能:创至职工信息。将管理员输入的假设干条信息记录存入内存中。输入:需创建的信息记录条数。 假设干条职工信息记录工号、职位、等信息。处理:提示管理员逐条输入职工信息。 获取管理员输入的信息,存入内存中。 提示管理员录入成功。voiddisplay()功能:浏览经过改动的信息记录,即打印出内存中的数据。voidsearch()功能:查询所需职工信息记录。四种方式查询:工号、和工资。根据管理员输入的职工信息和查找方式,按不同方式查找记录,列表显示查找到的记录内容。输入:想要查找的方式。要查询的职工的某一项信息。处理:

9、提示管理员要查询的方式和要查询职工的对应信息。 循环品牌查找对应记录。 如果找找,则列表显示结果。voidmodify()功能:修改原有的职工信息记录。两种查找匹配记录的方式:工号和。根据管理员输入的查找方式和职工信息查找是否存在匹配记录,假设存在,则将此职工的信息改为管理员输入的内容。输入:想要查找匹配记录的方式。 要修改的职工的某一项信息。 确认修改的选项字母。 所要修改记录的内容值工号、等。处理:接收管理员输入的查找匹配记录的方式和要修改职工的某一项信息。判断是否有匹配职工记录,假设有,则列表显示该记录并提示管理员是否确认修改。提示管理员输入该职工方的各项信息。 提示管理员是否修改成功。

10、voiddelet()功能:删除指定的职工信息记录。两种查找匹配记录的方式:工号和。根据管理员输入的查找方式和职工信息查找匹配记录,假设找到,则列表显示,经提示后删除该条记录。输入:想要查找匹配记录的方式。 要删除的职工的某一项信息。 确认删除的选项字母。处理:接收管理员输入的查找匹配记录的方式和要修改职工的某一项信息。 判断是否有匹配职工记录,假设有,则列表显示该记录并提示管理员确认删除。 提示管理员是否删除成功。voidadd()功能:增加新的职工信息记录。判断所输入的工号是否已存在,假设不存在,则将管理员输入的假设干条信息记录存入内存中。输入:想要添加职工的工号。新的职工信息记录、学历等

11、。处理:提示管理员输入新职工的工号。 判断职工号是否存在,假设不存在,则提示管理员逐条输入职工信息。 获取管理员输入的信息,存入内存中。 提示管理员添加成功。voidorder()功能:给职工信息记录排序升序。三种排序方式:、年龄和工资。根据管理员输入的排学习文档仅供参考序方式排序,列表显示排序结果。输入:想要的排序方式。处理:提示管理员输入排序方式。 按照指定方式排序。 列表显示排序结果。voidsave()功能:保存职工信息记录及记录条数至文件中。输入:确认保存的选项字母。处理:提示管理员确认保存。 假设确认保存,则将内存中的数据保存至指定文件中。 提示管理员保存成功。voidload()

12、功能:从文件中读取职工信息记录及记录条数。输入:确认读取的选项字母。处理:提示管理员确认读取。 将文件中的数据读取至内存中。 提示管理员读取成功。voidquit()功能:确认保存过数据后,安全退出系统。输入:确认保存的选项字母。确认退出系统的选项字母。处理:提示管理员确认保存。 假设确认保存,则将内存中的数据保存至指定文件中。 提示管理员是否退出系统,假设是则退出。1所示。voidmain()功能:根据主菜单上的各项指令,调用1至14的各个函数。系统控制图如图6.程序分析程序预处理包括加载头文件,#include<stdio.h>#include<stdlib.h>#

13、include<string.h>#include<windows.h>#include<conio.h>#defineN20structstaffinfocharnum10;charname9;charsex3;charage3;charedu5;charrole5;charsalary6;chartel16;charaddr30;staN;intn=0;定义结构体,宏定义,全局变量,并对他们进行初始化。/*输入/输出函数*/*其他说明*/*字符串函数*/*系统操作函数*/*屏幕操作函数*/*系统记录的职工数,可根据不同企业的需要更改/*工号*/*学历*/

14、*职位*/*/*住址*/*实际录入的职工信息记录总条数*/*/主函数voidmain()主要实现对整个程序的运行控制。详细分析可参考图/*主函数/*光标定位*/*打印表头*/*录入职工信息*/*浏览职工信息*/voiddelet();voidadd();voidorder();voidsave();voidload();voidquit();printf(printf(printf(printf(printf(printf(printf(printf(printf(printf(printf(do(0021002200230024002500260027002800290020*n"

15、);录入职工信息浏览职工信息查询所需职工信息修改原有的职工信息删除原有的职工信息添加新的职工信息给职工信息排序保存职工信息读取职工信息退出系统查询所需职工信息删除原有的职工信息添加新的职工信息给职工信息排序保存职工信息读取职工信息退出系统)n");)n");)n");)n");)n");)n");)n");)n");)n");)n");*voidmain()(voidgotoxy(intx,inty);voidshowtable1();voidshowtable2();voidenter();i

16、ntfind(charstr30,intt);voidcreat();voiddisplay();voidsearch();voidmodify();/*从文件读取职工信息*/*退出系统*/system("color3e");enter();while(1)(intchoice;system("cls");/*清屏*/printf(”职工信息管理系统");printf("=主菜单=n");printf("n004请输入指令(09):");scanf("%d”,&choice);/*输入选

17、择的数字*/while(choice<0|choice>9);switch(choice)(case1:creat();break;case2:display();break;case3:search();break;case4:modify();break;case5:delet();break;case6:add();break;case7:order();break;case8:save();break;case9:load();break;case0:quit();break;default:break;光标定位函数voidgotoxy(intx,inty)0<x&l

18、t;80,0<y,0,0代表左上角。/*光标定位*/voidgotoxy(intx,inty)(COORDcoord;coord.X=x;/*横坐标,表示列数*/coord.Y=y;/*纵坐标,表示行数*/SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);表头showtable1()和表尾showtable2()用于打印表格的头和尾。/*/voidshowtable1()(printf("*");inti;for(i=0;i<78;i+)printf("=");pr

19、intf("*");printf("|工号|性别|年龄|学历|职位|工资|nrintfHl-i-u-u-u-u-u-i-uI-p;住址|");/*表尾*/voidshowtable2()inti;printf("*");for(i=0;i<78;i+)printf("=");printf("*");登录界面用于管理员登录,假设密码输入正确则进入菜单。/*登录*/voidenter()(charstr1="123"charstr220;gotoxy(15,10);欢送进入

20、职工信息管理系统gotoxy(29,12);printf("004请输入管理员登录密码gets(str2);!n");if(strcmp(str1,str2)/*字符串函数strcmp,指假设两者相等则返回0*/(system("cls");gotoxy(32,8);printf("004密码输入错误!");gotoxy(32,9);printf("004请重新输入:");fflush(stdin);/*将缓冲区的内容传送到stdin中,即清理缓冲区的内容*/enter();创建职工记录用于第一次输入职工信息记录。

21、/*创建职工信息*/voidcreat()/*创建职工信息记录*/(inti,r;system("cls");/*清屏*/printf("nn004请输入本次所录入职工信息数:");scanf("%d”,&r);n+=r;/*r为当前次输入的职工信息数,n为录入的职工信息数总数*/for(i=0;i<r;i+)(system("cls");printf("n004输入第%d位职工的信息:n”,i+1);printf("004请输入工号:");scanf("%s”,stai

22、.num);printf("004请输入:");scanf("%s”,);printf("004请输入性别:");scanf("%s”,stai.sex);printf("004请输入年龄:");scanf("%s”,stai.age);printf("004请输入学历:");scanf("%s”,);printf("004请输入职位:");scanf("%s”,stai.role);printf("0

23、04请输入工资:");scanf("%s”,stai.salary);printf("004请输入:");scanf("%s”,stai.tel);printf("004请输入住址:");scanf("%s”,stai.addr);printf("nn002信息成功录入!n");printf("004请按任意键返回主菜单:");fflush(stdin);/*清除缓存*/getch();/*接收任意一个字符*/浏览记录用于查看内存中的职工信息记录。*浏览职工信息*/voidd

24、isplay()(inti;system("cls");gotoxy(16,2);printf(全体职工信息*n");gotoxy(0,3);showtable1();for(i=0;i<n;i+)printf("|%-5s|%-7s|%-5s|%-5s|%-5s|%-5s|%-5s|%-9s|%-15s|”,stai.num,,stai.sex,stai.age,,stai.role,stai.salary,stai.tel,stai.addr);showtable2();printf("n004请按任

25、意键返回主菜单:");fflush(stdin);getch();查询记录用于查询职工信息记录,有四种查询方式。/*查询所需的职工信息(4种方式)*/voidsearch()(inta,t;charstr20;system("cls");gotoxy(26,8);printf("=查询职工信息=n");printf("*");gotoxy(19,10);printf("(0021:按工号查询)n");gotoxy(19,11);printf("(0022:按查询)n");gotoxy(

26、19,12);printf("(0023:按查询)n");gotoxy(19,13);printf("(0024:按工资查询)n");gotoxy(20,14);printf("*");printf("004请输入您希望的查询方式(14):");scanf("%d”,&t);system("cls");switch(t)004请输入工号:");break;004请输入:");break;004请输入:");break;004请输入工资:"

27、);break;(case1:printf("nncase2:printf("nncase3:printf("nncase4:printf("nnscanf("%s",str);与stai.*中的字符串比较,假设一样find()函数返回i值,即找到第i+1条信a=find(str,t);/*str息与刚输入*勺相同,t表示查询方式*/if(a!=-1)printf("n002已查到该职工信息,内容为:n");showtable1();printf("|%-5s|%-7s|%-5s|%-5s|%-5s|%-

28、5s|%-5s|%-9s|%-15s|”,staa.num,,staa.sex,staa.age,,staa.role,staa.salary,staa.tel,staa.addr);showtable2();elseprintf("nn004对不起,文件中没有此职工的记录。n");printf("004请按任意键返回主菜单:");fflush(stdin);getch();查找指定记录用于查找匹配记录,将str100与stai.*中的字符串比较,假设两者一样返回记录号,假设两者不一样返回-1。/*查找指定记录*/int

29、find(charstr30,intt)(inti;for(i=0;i<n;i+)/*t表示1为工号2为3为工资4为*/if(t=1&&strcmp(str,stai.num)=0)|(t=2&&strcmp(str,)=0)|(t=3&&strcmp(str,stai.salary)=0)|(t=4&&strcmp(str,stai.tel)=0)return(i);/*两字符串假设一样,strcmp(str,stai.*返回零值*/return(-1);修改记录用于修改职工信息记录,有两种方式查找匹配记

30、录。/*修改原有的职工信息*/voidmodify()(inta,i;charstr20,e;system("cls");gotoxy(26,8);n");printf(-=修改职工信息gotoxy(20,9);printf("*");gotoxy(19,10);printf("(gotoxy(19,11);printf("(gotoxy(20,12);0021:按工号修改0022:按修改)n");)n");printf("*");gotoxy(24,13);printf("

31、004请输入您希望的修改方式(12):");scanf("%d",&i);system("cls");switch(i)(case1:printf("nn004请输入要修改的信息的工号:");break;case2:printf("nn004请输入要修改的信息的:");break;scanf("%s”,str);a=find(str,i);if(a!=-1)printf("n004您所要修改的职工信息为:n");showtable1();printf("|%

32、-5s|%-7s|%-5s|%-5s|%-5s|%-5s|%-5s|%-9s|%-15s|”,staa.num,,staa.sex,staa.age,,staa.role,staa.salary,staa.tel,staa.addr);showtable2();printf("004确认修改?(Y/N):");fflush(stdin);scanf("%c”,&e);if(e='Y'|e='y')system("cls");printf("nn004请输入工号:

33、");scanf("%s”,staa.num);printf("004请输入:");scanf("%s”,);printf("004请输入性别:");scanf("%s”,staa.sex);printf("004请输入年龄:");scanf("%s”,staa.age);printf("004请输入学历:");scanf("%s”,);printf("004请输入职位:");scanf("%

34、s”,staa.role);printf("004请输入工资:");scanf("%s",staa.salary);printf("004请输入:");scanf("%s”,staa.tel);printf("004请输入住址:");scanf("%s”,staa.addr);printf("nn002修改成功!n");printf("004请按任意键返回主菜单:”);fflush(stdin);getch();elseif(e='N'|e='

35、;n')printf("004修改已取消!n");printf("004请按任意键返回主菜单:");fflush(stdin);getch();elseprintf("004选择错误,请按任意键返回主菜单:,fflush(stdin);getch();elseprintf("nn004对不起,文件中没有此职工的记录。n");printf("004请按任意键返回主菜单:,fflush(stdin);getch();删除记录用于删除指定职工信息记录,有两种方式查找匹配记录。/*删除原有的职工信息*/voidde

36、let()(inta,j;charstr20,e;system("cls");gotoxy(26,8);n");printf(-=删除职工信息gotoxy(20,9);printf("*");gotoxy(19,10);printf("(gotoxy(19,11);printf("(gotoxy(20,12);0021:按工号删除0022:按删除)n");)n");printf("*");gotoxy(24,13);printf("004请输入您希望的删除方式(12):&qu

37、ot;);scanf("%d”,&j);system("cls");switch(j)(case1:printf("nn004请输入要删除的工号:,break;case2:printf("nn004请输入要删除的:");break;scanf("%s",str);a=find(str,j);if(a!=-1)(printf("n004您所要删除的职工信息为:n");showtable1();printf("|%-5s|%-7s|%-5s|%-5s|%-5s|%-5s|%-5s|

38、%-9s|%-15s|”,staa.num,,staa.sex,staa.age,,staa.role,staa.salary,staa.tel,staa.addr);showtable2();printf("004确认删除?(Y/N):");fflush(stdin);scanf("%c",&e);if(e='Y'|e='y')(for(;a<n;a+)staa=staa+1;n-;printf("002删除成功!n");printf("004

39、请按任意键返回主菜单:”);fflush(stdin);getch();elseif(e='N'|e='n')(printf("004删除已取消!n");printf("004请按任意键返回主菜单:");fflush(stdin);getch();else(printf("004选择错误,请按任意键返回主菜单:,fflush(stdin);getch();else(printf("nn004对不起,文件中没有此职工的记录。n");printf("004请按任意键返回主菜单:,fflu

40、sh(stdin);getch();添加记录用于添加新的职工信息,当新输入的职工号不与原职工号重复时才可以添加。/*添加新的职工信息*/voidadd()(inta;charstr6;for(;)(system("cls");printf("nn004请输入您想添加的新的职工信息的工号:");scanf("%s”,str);a=find(str,1);if(a=-1)break;/*a=-1就是字符串不相等,即新的工号与原有的不重复,"break;"使语句跳出当前for的死循环*/else/*假设a!=-1就重新输入*/(p

41、rintf("004对不起,您所输入的职工号已存在!n");printf(-004请按任意键重新输入:");fflush(stdin);getch();printf("n004输入新的职工的信息:n");strcpy(stan.num,str);printf("004请输入:");scanf("%s”,);printf("004请输入性别:");scanf("%s”,stan.sex);printf("004请输入年龄:");scanf("

42、;%s”,stan.age);printf("004请输入学历:");scanf("%s”,);printf("004请输入职位:");scanf("%s”,stan.role);printf("004请输入工资:");scanf("%s",stan.salary);printf("004请输入:");scanf("%s”,stan.tel);printf("004请输入住址:");scanf("%s”,stan.add

43、r);n+;printf("nn002信息添加成功!n");printf("004请按任意键返回主菜单:");fflush(stdin);getch();排序用于职工信息记录排序,有3种排序方式。数。/*给职工信息排序并显示*/使用冒泡排序法,字符串数组比较使用strcmp()函voidorder()inta,i,j;structstaffinfostr;system("cls");gotoxy(26,8);printf(-=职工信息排序gotoxy(20,9);n");printf("*");gotox

44、y(19,10);printf("(gotoxy(19,11);printf("(gotoxy(19,12);printf("(gotoxy(20,13);0021:按排序0022:按年龄排序0023:按工资排序)n");)n");)n");printf("*");gotoxy(24,16);printf("004请输入您希望的排序方式(13):");scanf("%d”,&a);system("cls");switch(a)按排序(升序)*n")

45、;case1:gotoxy(16,2);printf("*/*冒泡排序,升序*/for(i=0;i<n-1;i+)for(j=n-1;j>i;j-)if(strcmp(,)>0)str=staj-1;staj-1=staj;staj=str;gotoxy(0,3);showtable1();for(i=0;i<n;i+)printf("|%-5s|%-7s|%-5s|%-5s|%-5s|%-5s|%-5s|%-9s|%-15s|”,stai.num,,stai.sex,stai.age,sta

46、,stai.role,stai.salary,stai.tel,stai.addr);showtable2();break;按年龄排序(升序)*n");case2:gotoxy(16,2);printf("*/*冒泡排序,升序*/for(i=0;i<n-1;i+)for(j=n-1;j>i;j-)if(strcmp(staj-1.age,staj.age)>0)str=staj-1;staj-1=staj;staj=str;gotoxy(0,3);showtable1();for(i=0;i<n;i+)printf("|%-5s|

47、%-7s|%-5s|%-5s|%-5s|%-5s|%-5s|%-9s|%-15s|”,stai.num,,stai.sex,stai.age,,stai.role,stai.salary,stai.tel,stai.addr);showtable2();break;按工资排序(升序)*n");case3:gotoxy(16,2);printf("*/*冒泡排序,升序*/for(i=0;i<n-1;i+)for(j=n-1;j>i;j-)if(strcmp(staj-1.salary,staj.salary)>0)str=staj-1;staj-1=staj;staj=str;gotoxy(0,3);showtable1();for(i=0;i<n;i+)printf("|%-5s|%-7s|%-5s|%-5s|%-5s|%-5s|%-5s|%-9s|%-15s|”,stai.num,,stai.sex,stai.age,,stai.role,stai.salary,stai.tel,stai.addr);showtable2();break;printf("004

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论