收藏 分销(赏)

C语言课程设计——职工信息管理系统设计.doc

上传人:丰**** 文档编号:4361039 上传时间:2024-09-13 格式:DOC 页数:17 大小:146.50KB
下载 相关 举报
C语言课程设计——职工信息管理系统设计.doc_第1页
第1页 / 共17页
C语言课程设计——职工信息管理系统设计.doc_第2页
第2页 / 共17页
点击查看更多>>
资源描述
C语言课程设计题目及要求 题目:职工信息管理系统设计 职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。试设计一职工信息管理系统,使之能提供以下功能: 1、职工信息录入功能(职工信息用文件保存)。 2、职工信息浏览功能。 3、查询功能:可以按“职工号”、“姓名”、“电话”、“工资”等方式查询记录;如果查询信息不存在,显示没有找到信息; 4、删除功能:可以根据职工号或姓名删除一条已经存在的职工信息; 5、排序功能:能对姓名、年龄、工资进行排序,并显示; 6、修改功能:改变记录项的一个或多个属性,并用新的记录项覆盖已经存在的记录项; 7、数据存、取:数据以文件形式存储在磁盘上,因此在程序运行中需要对文件进行读取操作。编程人员可以根据实际需要自己定义文件的存储格式,在数据读写时必须精确定位,以免破坏文件的正确性。除此之外,程序中还要不停处理用户的输入,对输入数据的容错性进行检查,可以保证数据的合法性,避免恶意和非恶意的操作对用户数据的破坏。 8、系统以菜单方式工作。 C语言课程设计——职工信息管理系统设计 1. 设计目的 在今天这个高速信息时代,许多繁杂的办公事务都由计算机代劳,例如职工信息管理等重复劳动越来越需要计算机来处理。本系统就是为提高企业管理职工信息的效率而设计的,现在职工信息管理系统发挥无可取代的作用。 职工信息管理系统是一个可以用来进行职工工号、姓名等自然信息以及各项工资构成进行录入、查询、修改、删除、增加和排序浏览等操作的应用软件。C3CrFx5。 2. 设计的总体思想 本系统是用Visual C进行设计与开发,总体思想是结构化、模块化的程序设计。由于主要实现的是管理系统的增、删、改、查和排序等功能,因此应用到程序设计中的基本控制结构,如循环和选择,还使用到C语言最具特色的语言成分——指针,高效地使用数组、字符串和结构体,采用经典的排序方法——冒泡法进行排序,并且包含对文件的读、写等基本操作。HxB0Thr。 3. 功能模块描述 职工信息管理系统是为企业进行职工信息管理提供辅助而设计的,需要为用户提供一个简单的人机界面以便操作,各功能模块如下。bxBtGBT。 1) 登录模块:根据输入的登录密码判断是否允许该用户使用本系统,输入密码正确才能进入管理界面,管理职工信息。ylg5971。 2) 创建模块:当第一次使用本系统时,根据提示输入职工的工号、姓名、性别、年龄、学历、职位、工资、电话和住址,可一次性输入多条职工的信息记录。浏览模块:可以浏览经输入、修改、删除、添加、排序、读取后的职工信息。R15gBrR。 3) 查询模块:分为根据工号、姓名、电话、工资查询的四个具体需求,分别提示管理员要查询的职工信息的的工号、姓名、电话或工资。bVXFxHp。 4) 修改模块:分为根据工号、姓名修改的两个具体需求,分别提示管理员要修改的职工信息的工号和姓名,如果有对应职工的信息记录存在,则逐项列出对应职工的信息。10bZo2Q。 5) 删除模块:分为根据工号、姓名删除的两个具体需求,分别提示管理员要删除的职工信息的工号和姓名,如果有则删除此职工对应的信息记录。pgfjsVn。 6) 添加模块:可在原有职工信息记录的基础上增加新的职工信息记录,并保存至磁盘中。 7) 排序模块:分为根据姓名、年龄、工资排序的三个具体需求,分别提示管理员选择排序的方式。 8) 保存模块:将2)3)4)5)6)7)8)模块中改动的数据保存至文件中,以便进行管理、查找和备份。 9) 读取模块:将文件中的数据读取至内存中。 4. 概要设计 系统模块结构图 根据模块功能描述,职工信息系统可以分为11个模块,系统模块结构如图1所示。 5. 详细设计 5.1数据结构设计 本程序定义结构体staffinfo,用于存放职工的相关信息。定义的结构体如下(每个变量后面/* */中的内容为各个变量的含义):delmkXA。 struct staffinfo { char num[10]; /*工号*/ char name[9]; /*姓名*/ char sex[3]; /*性别*/ char age[3]; /*年龄*/ char edu[5]; /*学历*/ char role[5]; /*职位*/ char salary[6]; /*工资*/ char tel[16]; /*电话*/ char addr[30]; /*住址*/ }sta[N]; 由于工号、姓名、电话、住址等信息是用来描述职工这个有机整体,为了表示这些字段不是孤立的,而是共同描述一个完整的事物,因此用结构体来实现。FHr4ZYa。 5.2各函数说明 1) void gotoxy(int x,int y) 功能:用于在屏幕上定位,其中整型数x代表列数,整型数y代表行数,其中0≤x≤80,0≤y,(0,0)代表左上角。NycaETJ。 2) void showtable1() void showtable2() 功能:分别打印表头与表尾。 3) void enter() 功能:进入系统登录界面,验证管理员输入的密码。 输入:登录密码。 处理:①接收管理员输入的密码,存放到相应变量中进行判断。 ②判断密码是否正确,如果相符,则进入主菜单。 ③如果不相符,则提示用户重新输入。 4) int find(char str[30],int t) 功能:查找指定记录,str[30]表示需管理员输入的职工的某一项信息,t表示通过哪一项来查找,例如通过工号、姓名来查找。若找到与输入的信息相同的记录,则返回找到的记录号,若找不到就返回-1。LLNnLJT。 输入:职工信息的某一项和想查找的途径。 处理:①接收管理员输入的职工信息与查找方式,并存入相应的变量中。 ②将内存中的数据与输入信息逐条比对,直到找到相同的记录,返回找到的记录号。 ③若没找到该职工的记录,就返回-1。 5) void creat() 功能:创建职工信息。将管理员输入的若干条信息记录存入内存中。 输入:①需创建的信息记录条数。 ②若干条职工信息记录(工号、姓名、职位、电话等信息)。 处理:①提示管理员逐条输入职工信息。 ②获取管理员输入的信息,存入内存中。 ③提示管理员录入成功。 6) void display() 功能:浏览经过改动的信息记录,即打印出内存中的数据。 7) void search() 功能:查询所需职工信息记录。四种方式查询:工号、姓名、电话和工资。根据管理员输入的职工信息和查找方式,按不同方式查找记录,列表显示查找到的记录内容。EWAvgtB。 输入:①想要查找的方式。 ②要查询的职工的某一项信息。 处理:①提示管理员要查询的方式和要查询职工的对应信息。 ②循环品牌查找对应记录。 ③如果找找,则列表显示结果。 8) void modify() 功能:修改原有的职工信息记录。两种查找匹配记录的方式:工号和姓名。根据管理员输入的查找方式和职工信息查找是否存在匹配记录,若存在,则将此职工的信息改为管理员输入的内容。EgZkXdh。 输入:①想要查找匹配记录的方式。 ②要修改的职工的某一项信息。 ③确认修改的选项字母。 ④所要修改记录的内容值(工号、姓名等)。 处理:①接收管理员输入的查找匹配记录的方式和要修改职工的某一项信息。 ②判断是否有匹配职工记录,若有,则列表显示该记录并提示管理员是否确认修改。③提示管理员输入该职工方的各项信息。rWNaIjv。 ④提示管理员是否修改成功。 9) void delet() 功能:删除指定的职工信息记录。两种查找匹配记录的方式:工号和姓名。根据管理员输入的查找方式和职工信息查找匹配记录,若找到,则列表显示,经提示后删除该条记录。K50nGjG。 输入:①想要查找匹配记录的方式。 ②要删除的职工的某一项信息。 ③确认删除的选项字母。 处理:①接收管理员输入的查找匹配记录的方式和要修改职工的某一项信息。 ②判断是否有匹配职工记录,若有,则列表显示该记录并提示管理员确认删除。 ③提示管理员是否删除成功。 10) void add() 功能:增加新的职工信息记录。判断所输入的工号是否已存在,若不存在,则将管理员输入的若干条信息记录存入内存中。73NwHrY。 输入:①想要添加职工的工号。 ②新的职工信息记录(姓名、学历等)。 处理:①提示管理员输入新职工的工号。 ②判断职工号是否存在,若不存在,则提示管理员逐条输入职工信息。 ③获取管理员输入的信息,存入内存中。 ④提示管理员添加成功。 11) void order() 功能:给职工信息记录排序(升序)。三种排序方式:姓名、年龄和工资。根据管理员输入的排序方式排序,列表显示排序结果。7Foss7i。 输入:想要的排序方式。 处理:①提示管理员输入排序方式。 ②按照指定方式排序。 ③列表显示排序结果。 12) void save() 功能:保存职工信息记录及记录条数至文件中。 输入:确认保存的选项字母。 处理:①提示管理员确认保存。 ②若确认保存,则将内存中的数据保存至指定文件中。 ③提示管理员保存成功。 13) void load() 功能:从文件中读取职工信息记录及记录条数。 输入:确认读取的选项字母。 处理:①提示管理员确认读取。 ②将文件中的数据读取至内存中。 ③提示管理员读取成功。 14) void quit() 功能:确认保存过数据后,安全退出系统。 输入:①确认保存的选项字母。 ②确认退出系统的选项字母。 处理:①提示管理员确认保存。 ②若确认保存,则将内存中的数据保存至指定文件中。 ③提示管理员是否退出系统,若是则退出。 15) void main() 功能:根据主菜单上的各项指令,调用1)至14)的各个函数。系统控制图如图1所示。 6. 程序分析 6.1程序预处理 包括加载头文件,定义结构体,宏定义,全局变量,并对他们进行初始化。 #include <stdio.h> /*输入/输出函数*/ #include <stdlib.h> /*其他说明*/ #include <string.h> /*字符串函数*/ #include <windows.h> /*系统操作函数*/ #include <conio.h> /*屏幕操作函数*/ #define N 20 /*系统记录的职工数,可根据不同企业的需要更改*/ struct staffinfo { char num[10]; /*工号*/ char name[9]; char sex[3]; char age[3]; char edu[5]; /*学历*/ char role[5]; /*职位*/ char salary[6]; char tel[16]; /*电话*/ char addr[30]; /*住址*/ }sta[N]; int n=0; /*实际录入的职工信息记录总条数*/ 6.2主函数void main() 主要实现对整个程序的运行控制。详细分析可参考图3。 /******************************************** *主函数 *********************************************/ void main() { void gotoxy(int x,int y); /*光标定位*/ void showtable1(); /*打印表头*/ void showtable2(); void enter(); int find(char str[30],int t); void creat(); /*录入职工信息*/ void display(); /*浏览职工信息*/ void search(); void modify(); void delet(); void add(); void order(); void save(); / void load(); /*从文件读取职工信息*/ void quit(); /*退出系统*/ system("color 3e"); enter(); while (1) { int choice; system("cls");/*清屏*/ printf("职工信息管理系统"); printf("==============主菜单==============\n"); printf("************************************************\n");2RsdpFm。 printf(" (( \002 1: 录入职工信息 ))\n");oVFYCya。 printf(" (( \002 2: 浏览职工信息 ))\n");lQL1vKh。 printf(" (( \002 3: 查询所需职工信息 ))\n");Pwb3NVe。 printf(" (( \002 4: 修改原有的职工信息 ))\n");fgdufps。 printf(" (( \002 5: 删除原有的职工信息 ))\n");mVwo0A1。 printf(" (( \002 6: 添加新的职工信息 ))\n");B2DqWa5。 printf(" (( \002 7: 给职工信息排序 ))\n");Y74AuvW。 printf(" (( \002 8: 保存职工信息 ))\n");kyzcrWB。 printf(" (( \002 9: 读取职工信息 ))\n");3GwHE8N。 printf(" (( \002 0: 退出系统 ))\n");dqXg7q4。 printf(" ************************************************\n");wEVzuca。 do { printf("\n \004请输入指令(0~9):");ddPymrB。 scanf("%d",&choice); /*输入选择的数字*/ }while(choice<0||choice>9); switch(choice) { case 1: creat(); break; case 2: display();break; case 3: search();break; case 4: modify();break; case 5: delet();break; case 6: add();break; case 7: order();break; case 8: save();break; case 9: load();break; case 0: quit();break; default: break; } } } 6.3光标定位函数void gotoxy(int x,int y) 0≤x≤80,0≤y,(0,0)代表左上角。 /******************************************* *光标定位 *******************************************/ void gotoxy(int x,int y) { COORD coord; coord.X=x; /*横坐标,表示列数*/ coord.Y=y; /*纵坐标,表示行数*/ SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); WcQ84y5。 } 6.4表头showtable1()和表尾showtable2() 用于打印表格的头和尾。 /********************************************* *表头 *********************************************/ void showtable1() { printf("*"); int i; for(i=0;i<78;i++) printf("="); printf("*"); printf("| 工号 | 姓名 | 性别 | 年龄 | 学历 | 职位 | 工资 | 电话 | 住址 |");gMtst9M。 printf("|------+--------+------+------+------+------+------+----------+----------------|");bAOC1Lb。 } /********************************************* *表尾 *********************************************/ void showtable2() { int i; printf("*"); for(i=0;i<78;i++) printf("="); printf("*"); } 6.5登录界面 用于管理员登录,若密码输入正确则进入菜单。 /********************************************* *登录 **********************************************/ void enter() { char str1[]={"123"}; char str2[20]; gotoxy(15,10); printf("\欢迎进入职工信息管理系统!! \n"); gotoxy(29,12); printf("\004请输入管理员登录密码:"); gets(str2); if(strcmp(str1,str2))/*字符串函数strcmp,指若两者相等则返回0*/ { system("cls"); gotoxy(32,8); printf("\004密码输入错误!"); gotoxy(32,9); printf("\004请重新输入:"); fflush(stdin);/*将缓冲区的内容传送到stdin中,即清理缓冲区的内容*/ enter(); } } 6.6创建职工记录 用于第一次输入职工信息记录。 /***************************************** *创建职工信息 ******************************************/ void creat() /*创建职工信息记录*/ { int i,r; system("cls"); /*清屏*/ printf("\n\n \004请输入本次所录入职工信息数:"); scanf("%d",&r); n+=r; /*r为当前次输入的职工信息数,n为录入的职工信息数总数*/ for(i=0;i<r;i++) { system("cls"); printf("\n \004输入第%d位职工的信息:\n",i+1); printf(" \004请输入工号:"); scanf("%s",sta[i].num); printf(" \004请输入姓名:"); scanf("%s",sta[i].name); printf(" \004请输入性别:"); scanf("%s",sta[i].sex); printf(" \004请输入年龄:"); scanf("%s",sta[i].age); printf(" \004请输入学历:"); scanf("%s",sta[i].edu); printf(" \004请输入职位:"); scanf("%s",sta[i].role); printf(" \004请输入工资:"); scanf("%s",sta[i].salary); printf(" \004请输入电话:"); scanf("%s",sta[i].tel); printf(" \004请输入住址:"); scanf("%s",sta[i].addr); } printf("\n\n \002信息成功录入!\n"); printf(" \004请按任意键返回主菜单:"); fflush(stdin); /*清除缓存*/ getch(); /*接收任意一个字符*/ } 6.7浏览记录 用于查看内存中的职工信息记录。 /***************************************** *浏览职工信息 ******************************************/ void display() { int i; system("cls"); gotoxy(16,2); printf("****************全体职工信息****************\n");5BKMeR8。 gotoxy(0,3); showtable1(); for(i=0;i<n;i++) printf("| %-5s| %-7s| %-5s| %-5s| %-5s| %-5s| %-5s| %-9s| %-15s|",sta[i].num,sta[i].name,sta[i].sex,sta[i].age,sta[i].edu,sta[i].role,sta[i].salary,sta[i].tel,sta[i].addr);svK3SbJ。 showtable2(); printf("\n \004请按任意键返回主菜单:"); fflush(stdin); getch(); } 6.8查询记录 用于查询职工信息记录,有四种查询方式。 /********************************** *查询所需的职工信息(4种方式) **********************************/ void search() { int a,t; char str[20]; system("cls"); gotoxy(26,8); printf("======查询职工信息======\n"); printf("************************************"); gotoxy(19,10); printf("(( \002 1: 按工号查询 ))\n"); gotoxy(19,11); printf("(( \002 2: 按姓名查询 ))\n"); gotoxy(19,12); printf("(( \002 3: 按电话查询 ))\n"); gotoxy(19,13); printf("(( \002 4: 按工资查询 ))\n"); gotoxy(20,14); printf("************************************"); printf("\004请输入您希望的查询方式(1~4):"); scanf("%d",&t); system("cls"); switch(t) { case 1:printf("\n\n \004请输入工号:");break; case 2:printf("\n\n \004请输入姓名:");break; case 3:printf("\n\n \004请输入电话:");break; case 4:printf("\n\n \004请输入工资:");break; } scanf("%s",str); a=find(str,t); /*str与sta[i].[*]中的字符串比较,若一样find()函数返回i值,即找到第i+1条信息与刚输入的相同,t表示查询方式*/XJQ1ZrB。 if(a!=-1) { printf("\n \002已查到该员工信息,内容为:\n"); showtable1(); printf("| %-5s| %-7s| %-5s| %-5s| %-5s| %-5s| %-5s| %-9s| %-15s|",sta[a].num,sta[a].name,sta[a].sex,sta[a].age,sta[a].edu,sta[a].role,sta[a].salary,sta[a].tel,sta[a].addr);711Vi2z。 showtable2(); } else printf("\n\n \004对不起,文件中没有此职工的记录。\n"); printf(" \004请按任意键返回主菜单:"); fflush(stdin); getch(); } 6.9查找指定记录 用于查找匹配记录,将str[100]与sta[i].[*]中的字符串比较,若两者一样返回记录号,若两者不一样返回-1。HPfmAQg。 /***************************************** *查找指定记录 ******************************************/ int find(char str[30],int t) /* t表示 1为工号 2为姓名 3为工资 4为电话*/5TQllwD。 { int i; for(i=0;i<n;i++) if((t==1&&strcmp(str,sta[i].num)==0)||(t==2&&strcmp(str,sta[i].name)==0)||(t==3&&strcmp(str,sta[i].salary)==0)||(t==4&&strcmp(str,sta[i].tel)==0))yBUnblJ。 return(i); /*两字符串若一样,strcmp(str,sta[i].[*]返回零值*/BCUBde3。 return(-1); } 6.10修改记录 用于修改职工信息记录,有两种方式查找匹配记录。 /************************************** *修改原有的职工信息 ***************************************/ void modify() { int a,i; char str[20],e; system("cls"); gotoxy(26,8); printf("======修改职工信息======\n"); gotoxy(20,9); printf("************************************"); gotoxy(19,10); printf("(( \002 1: 按工号修改 ))\n"); gotoxy(19,11); printf("(( \002 2: 按姓名修改 ))\n"); gotoxy(20,12); printf("************************************"); gotoxy(24,13); printf("\004请输入您希望的修改方式(1~2):"); scanf("%d",&i); system("cls"); switch(i) { case 1:printf("\n\n \004请输入要修改的信息的工号:");break; case 2:printf("\n\n \004请输入要修改的信息的姓名:");break; } scanf("%s",str); a=find(str,i); if(a!=-1) { printf("\n \004您所要修改的职工信息为:\n"); showtable1(); printf("| %-5s| %-7s| %-5s| %-5s| %-5s| %-5s| %-5s| %-9s| %-15s|",sta[a].num,sta[a].name,sta[a].sex,sta[a].age,sta[a].edu,sta[a].role,sta[a].salary,sta[a].tel,sta[a].addr);doQaCk1。 showtable2(); printf(" \004确认修改?(Y/N):"); fflush(stdin); scanf("%c",&e); if(e=='Y'||e=='y') { system("cls"); printf("\n\n \004请输入工号:"); scanf("%s",sta[a].num); printf(" \004请输入姓名:"); scanf("%s",sta[a].name); printf(" \004请输入性别:"); scanf("%s",sta[a].sex); printf(" \004请输入年龄:"); scanf("%s",sta[a].age); printf(" \004请输入学历:"); scanf("%s",sta[a].edu); printf(" \004请输入职位:"); scanf("%s",sta[a].role); printf(" \004请输入工资:"); scanf("%s",sta[a].salary); printf(" \004请输入电话:"); scanf("%s",sta[a].tel); printf(" \004请输入住址:"); scanf("%s",sta[a].addr); printf("\n\n \002修改成功!\n"); printf(" \004请按任意键返回主菜单:"); fflush(stdin); getch(); } else if(e=='N'||e=='n') { printf(" \004修改已取消!\n"); printf(" \004请按任意键返回主菜单:"); fflush(stdin); getch(); } else { printf(" \004选择错误,请按任意键返回主菜单:"); fflush(stdin); getch(); } } else { printf("\n\n \004对不起,文件中没有此职工的记录。\n"); printf(" \004请按任意键返回主菜单:"); fflush(stdin); getch(); } } 6.11删除记录 用于删除指定职工信息记录,有两种方式查找匹配记录。 /************************************** *删除原有的职工信息 ***************************************/ void delet() { int a,j; char str[20],e; system("cls"); gotoxy(26,8); printf("======删除职工信息======\n"); gotoxy(20,9); printf("************************************"); gotoxy(19,10); printf("(( \002 1: 按工号删除 ))\n"); gotoxy(19,11); printf("(( \002 2: 按姓名删除 ))\n"); gotoxy(20,12); printf("************************************"); gotoxy(24,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服