C语言课程设计职工信息管理系统设计
集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]
1.设计目的
在今天这个高速信息时代,许多繁杂的办公事务都由计算机代劳,例如职工信息管理等重复劳动越来越需要计算机来处理。本系统就是为提高企业管理职工信息的效率而设计的,现在职工信息管理系统发挥无可取代的作用。
职工信息管理系统是一个可以用来进行职工工号、姓名等自然信息以及各项工资构成进行录入、查询、修改、删除、增加和排序浏览等操作的应用软件。
2.设计的总体思想
本系统是用Visual C进行设计与开发,总体思想是结构化、模块化的程序设计。由于主要实现的是管理系统的增、删、改、查和排序等功能,因此应用到程序设计中的基本控制结构,如循环和选择,还使用到C语言最具特色的语言成分——指针,高效地使用数组、字符串和结构体,采用经典的排序方法——冒泡法进行排序,并且包含对文件的读、写等基本操作。
3.功能模块描述
职工信息管理系统是为企业进行职工信息管理提供辅助而设计的,需要为用户提供一个简单的人机界面以便操作,各功能模块如下。
1)登录模块:根据输入的登录密码判断是否允许该用户使用本系统,输入密码正确才
能进入管理界面,管理职工信息。
2)创建模块:当第一次使用本系统时,根据提示输入职工的工号、姓名、性别、年
龄、学历、职位、工资、电话和住址,可一次性输入多条职工的信息记录。浏览模块:可以浏览经输入、修改、删除、添加、排序、读取后的职工信息。
3)查询模块:分为根据工号、姓名、电话、工资查询的四个具体需求,分别提示管理
员要查询的职工信息的的工号、姓名、电话或工资。
4)修改模块:分为根据工号、姓名修改的两个具体需求,分别提示管理员要修改的职
工信息的工号和姓名,如果有对应职工的信息记录存在,则逐项列出对应职工的信息。
5)删除模块:分为根据工号、姓名删除的两个具体需求,分别提示管理员要删除的职
工信息的工号和姓名,如果有则删除此职工对应的信息记录。
6)添加模块:可在原有职工信息记录的基础上增加新的职工信息记录,并保存至磁盘
中。
7)排序模块:分为根据姓名、年龄、工资排序的三个具体需求,分别提示管理员选择
排序的方式。
8)保存模块:将2)3)4)5)6)7)8)模块中改动的数据保存至文件中,以便进行管理、查
找和备份。
9)读取模块:将文件中的数据读取至内存中。
4.概要设计
系统模块结构图
根据模块功能描述,职工信息系统可以分为11个模块,系统模块结构如图1所示。
5.详细设计
数据结构设计
本程序定义结构体staffinfo,用于存放职工的相关信息。定义的结构体如下(每个变量后面/* */中的内容为各个变量的含义):
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];
由于工号、姓名、电话、住址等信息是用来描述职工这个有机整体,为了表示这些字段不是孤立的,而是共同描述一个完整的事物,因此用结构体来实现。
各函数说明
1)void gotoxy(int x,int y)
功能:用于在屏幕上定位,其中整型数x代表列数,整型数y代表行数,其中0≤x≤80,0≤y,(0,0)代表左上角。
2)void showtable1()
void showtable2()
功能:分别打印表头与表尾。
3)void enter()
功能:进入系统登录界面,验证管理员输入的密码。
输入:登录密码。
处理:①接收管理员输入的密码,存放到相应变量中进行判断。
②判断密码是否正确,如果相符,则进入主菜单。
③如果不相符,则提示用户重新输入。
4)int find(char str[30],int t)
功能:查找指定记录,str[30]表示需管理员输入的职工的某一项信息,t表示通过哪一项来查找,例如通过工号、姓名来查找。若找到与输入的信息相同的记录,则返回找到的记录号,若找不到就返回-1。
输入:职工信息的某一项和想查找的途径。
处理:①接收管理员输入的职工信息与查找方式,并存入相应的变量中。
②将内存中的数据与输入信息逐条比对,直到找到相同的记录,返回找
到的记录号。
③若没找到该职工的记录,就返回-1。
5)void creat()
功能:创建职工信息。将管理员输入的若干条信息记录存入内存中。
输入:①需创建的信息记录条数。
②若干条职工信息记录(工号、姓名、职位、电话等信息)。
处理:①提示管理员逐条输入职工信息。
②获取管理员输入的信息,存入内存中。
③提示管理员录入成功。
6)void display()
功能:浏览经过改动的信息记录,即打印出内存中的数据。
7)void search()
功能:查询所需职工信息记录。四种方式查询:工号、姓名、电话和工资。根据管理员输入的职工信息和查找方式,按不同方式查找记录,列表显示查找到的记录内容。
输入:①想要查找的方式。
②要查询的职工的某一项信息。
处理:①提示管理员要查询的方式和要查询职工的对应信息。
②循环品牌查找对应记录。
③如果找找,则列表显示结果。
8)void modify()
功能:修改原有的职工信息记录。两种查找匹配记录的方式:工号和姓名。根据管理员输入的查找方式和职工信息查找是否存在匹配记录,若存在,则将此职工的信息改为管理员输入的内容。
输入:①想要查找匹配记录的方式。
②要修改的职工的某一项信息。
③确认修改的选项字母。
④所要修改记录的内容值(工号、姓名等)。
处理:①接收管理员输入的查找匹配记录的方式和要修改职工的某一项信息。
②判断是否有匹配职工记录,若有,则列表显示该记录并提示管理员是
否确认修改。③提示管理员输入该职工方的各项信息。
④提示管理员是否修改成功。
9)void delet()
功能:删除指定的职工信息记录。两种查找匹配记录的方式:工号和姓名。根
据管理员输入的查找方式和职工信息查找匹配记录,若找到,则列表显示,经
提示后删除该条记录。
输入:①想要查找匹配记录的方式。
②要删除的职工的某一项信息。
③确认删除的选项字母。
处理:①接收管理员输入的查找匹配记录的方式和要修改职工的某一项信息。
②判断是否有匹配职工记录,若有,则列表显示该记录并提示管理员确
认删除。
③提示管理员是否删除成功。
10)void add()
功能:增加新的职工信息记录。判断所输入的工号是否已存在,若不存在,则将管理员输入的若干条信息记录存入内存中。
输入:①想要添加职工的工号。
②新的职工信息记录(姓名、学历等)。
处理:①提示管理员输入新职工的工号。
②判断职工号是否存在,若不存在,则提示管理员逐条输入职工信息。
③获取管理员输入的信息,存入内存中。
④提示管理员添加成功。
11)void order()
功能:给职工信息记录排序(升序)。三种排序方式:姓名、年龄和工资。根据管理员输入的排序方式排序,列表显示排序结果。
输入:想要的排序方式。
处理:①提示管理员输入排序方式。
②按照指定方式排序。
③列表显示排序结果。
12)void save()
功能:保存职工信息记录及记录条数至文件中。
输入:确认保存的选项字母。
处理:①提示管理员确认保存。
②若确认保存,则将内存中的数据保存至指定文件中。
③提示管理员保存成功。
13)void load()
功能:从文件中读取职工信息记录及记录条数。
输入:确认读取的选项字母。
处理:①提示管理员确认读取。
②将文件中的数据读取至内存中。
③提示管理员读取成功。
14)void quit()
功能:确认保存过数据后,安全退出系统。
输入:①确认保存的选项字母。
②确认退出系统的选项字母。
处理:①提示管理员确认保存。
②若确认保存,则将内存中的数据保存至指定文件中。
③提示管理员是否退出系统,若是则退出。
15)void main()
功能:根据主菜单上的各项指令,调用1)至14)的各个函数。系统控制图如图1所示。
6.程序分析
程序预处理
包括加载头文件,定义结构体,宏定义,全局变量,并对他们进行初始化。
#include <> /*输入/输出函数*/
#include <> /*其他说明*/
#include <> /*字符串函数*/
#include <> /*系统操作函数*/
#include <> /*屏幕操作函数*/
#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; /*实际录入的职工信息记录总条数*/
主函数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");
printf(" (( \002 1: 录入职工信
息 ))\n");
printf(" (( \002 2: 浏览职工信
息 ))\n");
printf(" (( \002 3: 查询所需职工信
息 ))\n");
printf(" (( \002 4: 修改原有的职工信
息 ))\n");
printf(" (( \002 5: 删除原有的职工信
息 ))\n");
printf(" (( \002 6: 添加新的职工信
息 ))\n");
printf(" (( \002 7: 给职工信息排
序 ))\n");
printf(" (( \002 8: 保存职工信
息 ))\n");
printf(" (( \002 9: 读取职工信
息 ))\n");
printf(" (( \002 0: 退出系
统 ))\n");
printf("
************************************************\n");
do
{
printf("\n \004请输入指令(0~9):");
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;
}
}
}
光标定位函数void gotoxy(int x,int y) 0≤x≤80,0≤y,(0,0)代表左上角。
/******************************************* *光标定位
*******************************************/ void gotoxy(int x,int y)
{
COORD coord;
=x; /*横坐标,表示列数*/
=y; /*纵坐标,表示行数*/
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); }
表头showtable1()和表尾showtable2()
用于打印表格的头和尾。
/*********************************************
*表头
*********************************************/
void showtable1()
{
printf("*");
int i;
for(i=0;i<78;i++)
printf("=");
printf("*");
printf("| 工号 | 姓名 | 性别 | 年龄 | 学历 | 职位 | 工资 | 电话
| 住址 |");
printf("|------+--------+------+------+------+------+------+----------+----------------|");
}
/*********************************************
*表尾
*********************************************/
void showtable2()
{
int i;
printf("*");
for(i=0;i<78;i++)
printf("=");
printf("*");
}
登录界面
用于管理员登录,若密码输入正确则进入菜单。