1、C语言课程设计题目及要求 题目:职员信息管理系统设计 职员信息包含职员号、姓名、性别、年纪、学历、工资、住址、电话等(职员号不反复)。试设计一职员信息管理系统,使之能提供以下功效: 1、职员信息录入功效(职员信息用文件保留)。 2、职员信息浏览功效。 3、查询功效:能够按“职员号”、“姓名”、“电话”、“工资”等方法查询统计;假如查询信息不存在,显示没有找到信息; 4、删除功效:能够依据职员号或姓名删除一条已经存在职员信息; 5、排序功效:能对姓名、年纪、工资进行排序,并显示; 6、修改功效:改变统计项一个或多个属性,并用新统计项覆盖已经存在统计项; 7、数据存、取:数据以
2、文件形式存放在磁盘上,所以在程序运行中需要对文件进行读取操作。编程人员能够依据实际需要自己定义文件存放格式,在数据读写时必需正确定位,以免破坏文件正确性。除此之外,程序中还要不停处理用户输入,对输入数据容错性进行检验,能够确保数据正当性,避免恶意和非恶意操作对用户数据破坏。 8、系统以菜单方法工作。 1. 设计目标 在今天这个高速信息时代,很多繁杂办公事务全部由计算机代劳,比如职员信息管理等反复劳动越来越需要计算机来处理。本系统就是为提升企业管理职员信息效率而设计,现在职员信息管理系统发挥无可替换作用。 职员信息管理系统是一个能够用来进行职职员号、姓名等自然信息和各
3、项工资组成进行录入、查询、修改、删除、增加和排序浏览等操作应用软件。 2. 设计总体思想 本系统是用Visual C进行设计和开发,总体思想是结构化、模块化程序设计。因为关键实现是管理系统增、删、改、查和排序等功效,所以应用到程序设计中基础控制结构,如循环和选择,还使用到C语言最具特色语言成份——指针,高效地使用数组、字符串和结构体,采取经典排序方法——冒泡法进行排序,而且包含对文件读、写等基础操作。 3. 功效模块描述 职员信息管理系统是为企业进行职员信息管理提供辅助而设计,需要为用户提供一个简单人机界面方便操作,各功效模块以下。 1) 登录模块:依据输入登录密码判定是
4、否许可该用户使用本系统,输入密码正确才能进入管理界面,管理职员信息。 2) 创建模块:当第一次使用本系统时,依据提醒输入职员工号、姓名、性别、年纪、学历、职位、工资、电话和住址,可一次性输入多条职员信息统计。浏览模块:能够浏览经输入、修改、删除、添加、排序、读取后职员信息。 3) 查询模块:分为依据工号、姓名、电话、工资查询四个具体需求,分别提醒管理员要查询职员信息工号、姓名、电话或工资。 4) 修改模块:分为依据工号、姓名修改两个具体需求,分别提醒管理员要修改职员信息工号和姓名,假如有对应职员信息统计存在,则逐项列出对应职员信息。 5) 删除模块:分为依据工号、姓名删除两个具体需求,
5、分别提醒管理员要删除职员信息工号和姓名,假如有则删除此职员对应信息统计。 6) 添加模块:可在原有职员信息统计基础上增加新职员信息统计,并保留至磁盘中。 7) 排序模块:分为依据姓名、年纪、工资排序三个具体需求,分别提醒管理员选择排序方法。 8) 保留模块:将2)3)4)5)6)7)8)模块中改动数据保留至文件中,方便进行管理、查找和备份。 9) 读取模块:将文件中数据读取至内存中。 10) 4. 概要设计 系统模块结构图 依据模块功效描述,职员信息系统能够分为11个模块,系统模块结构图1所表示。 5. 具体设计 5.1数据结构设计 本程序定义结构体staff
6、info,用于存放职员相关信息。定义结构体以下(每个变量后面/* */中内容为各个变量含义): struct staffinfo { char num[10]; /*工号*/ char name[9]; /*姓名*/ char sex[3]; /*性别*/ char age[3]; /*年纪*/ char edu[5]; /*学历*/ char role[5]; /*职位*/ char salary[6]; /*工
7、资*/ char tel[16]; /*电话*/ char addr[30]; /*住址*/ }sta[N]; 因为工号、姓名、电话、住址等信息是用来描述职员这个有机整体,为了表示这些字段不是孤立,而是共同描述一个完整事物,所以用结构体来实现。 5.2各函数说明 1) void gotoxy(int x,int y) 功效:用于在屏幕上定位,其中整型数x代表列数,整型数y代表行数,其中0≤x≤80,0≤y,(0,0)代表左上角。 2) void showtable1() void showtable2() 功效:分别打印表头
8、和表尾。 3) void enter() 功效:进入系统登录界面,验证管理员输入密码。 输入:登录密码。 处理:①接收管理员输入密码,存放到对应变量中进行判定。 ②判定密码是否正确,假如相符,则进入主菜单。 ③假如不相符,则提醒用户重新输入。 4) int find(char str[30],int t) 功效:查找指定统计,str[30]表示需管理员输入职员某一项信息,t表示经过哪一项来查找,比如经过工号、姓名来查找。若找到和输入信息相同统计,则返回找到统计号,若找不到就返回-1。 输入:职员信息某一项和想查找路径。 处理:①接收管理员输入职员信息和查找方法,
9、并存入对应变量中。 ②将内存中数据和输入信息逐条比对,直到找到相同统计,返回找到统计号。 ③若没找到该职员统计,就返回-1。 5) void creat() 功效:创建职员信息。将管理员输入若干条信息统计存入内存中。 输入:①需创建信息统计条数。 ②若干条职员信息统计(工号、姓名、职位、电话等信息)。 处理:①提醒管理员逐条输入职员信息。 ②获取管理员输入信息,存入内存中。 ③提醒管理员录入成功。 6) void display() 功效:浏览经过改动信息统计,即打印出内存中数据。 7) void search() 功效:查询所需职员信息
10、统计。四种方法查询:工号、姓名、电话和工资。依据管理员输入职员信息和查找方法,按不一样方法查找统计,列表显示查找到统计内容。 输入:①想要查找方法。 ②要查询职员某一项信息。 处理:①提醒管理员要查询方法和要查询职员对应信息。 ②循环品牌查找对应统计。 ③假如找找,则列表显示结果。 8) void modify() 功效:修改原有职员信息统计。两种查找匹配统计方法:工号和姓名。依据管理员输入查找方法和职员信息查找是否存在匹配统计,若存在,则将此职员信息改为管理员输入内容。 输入:①想要查找匹配统计方法。 ②要修改职员某一项信息。 ③确定修改选项字母。 ④所要
11、修改统计内容值(工号、姓名等)。 处理:①接收管理员输入查找匹配统计方法和要修改职员某一项信息。 ②判定是否有匹配职员统计,若有,则列表显示该统计并提醒管理员是否确定修改。③提醒管理员输入该职员方各项信息。 ④提醒管理员是否修改成功。 9) void delet() 功效:删除指定职员信息统计。两种查找匹配统计方法:工号和姓名。依据管理员输入查找方法和职员信息查找匹配统计,若找到,则列表显示,经提醒后删除该条统计。 输入:①想要查找匹配统计方法。 ②要删除职员某一项信息。 ③确定删除选项字母。 处理:①接收管理员输入查找匹配统计方法和要修改职员某一项信息。 ②判定是否有
12、匹配职员统计,若有,则列表显示该统计并提醒管理员确定删除。 ③提醒管理员是否删除成功。 10) void add() 功效:增加新职员信息统计。判定所输入工号是否已存在,若不存在,则将管理员输入若干条信息统计存入内存中。 输入:①想要添加职员工号。 ②新职员信息统计(姓名、学历等)。 处理:①提醒管理员输入新职员工号。 ②判定职员号是否存在,若不存在,则提醒管理员逐条输入职员信息。 ③获取管理员输入信息,存入内存中。 ④提醒管理员添加成功。 11) void order() 功效:给职员信息统计排序(升序)。三种排序方法:姓名、年纪和工资。依据管理员输入排序方
13、法排序,列表显示排序结果。 输入:想要排序方法。 处理:①提醒管理员输入排序方法。 ②根据指定方法排序。 ③列表显示排序结果。 12) void save() 功效:保留职员信息统计及统计条数至文件中。 输入:确定保留选项字母。 处理:①提醒管理员确定保留。 ②若确定保留,则将内存中数据保留至指定文件中。 ③提醒管理员保留成功。 13) void load() 功效:从文件中读取职员信息统计及统计条数。 输入:确定读取选项字母。 处理:①提醒管理员确定读取。 ②将文件中数据读取至内存中。 ③提醒管理员读取成功。 14) void quit() 功
14、效:确定保留过数据后,安全退出系统。
输入:①确定保留选项字母。
②确定退出系统选项字母。
处理:①提醒管理员确定保留。
②若确定保留,则将内存中数据保留至指定文件中。
③提醒管理员是否退出系统,若是则退出。
15) void main()
功效:依据主菜单上各项指令,调用1)至14)各个函数。系统控制图图1所表示。
6. 程序分析
6.1程序预处理
包含加载头文件,定义结构体,宏定义,全局变量,并对她们进行初始化。
#include
15、ude
16、学历*/ char role[5]; /*职位*/ char salary[6]; char tel[16]; /*电话*/ char addr[30]; /*住址*/ }sta[N]; int n=0; /*实际录入职员信息统计总条数*/ 6.2主函数void main() 关键实现对整个程序运行控制。具体分析可参考图3。 /******************************************** *主函数 ********************************
17、/ 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(); /*浏
18、览职员信息*/ void search(); void modify(); void delet(); void add(); void order(); void save(); / void load(); /*从文件读取职员信息*/ void quit(); /*退出系统*/ system(
19、"color 3e"); enter(); while (1) { int choice; system("cls");/*清屏*/ printf("职员信息管理系统"); printf("==============主菜单==============\n"); printf("************************************************\n"); printf(" (( \002 1: 录入职员信息
20、 ))\n"); printf(" (( \002 2: 浏览职员信息 ))\n"); printf(" (( \002 3: 查询所需职员信息 ))\n"); printf(" (( \002 4: 修改原有职员信息 ))\n"); printf(" (( \002 5: 删除原有职员信息
21、 ))\n"); printf(" (( \002 6: 添加新职员信息 ))\n"); printf(" (( \002 7: 给职员信息排序 ))\n"); printf(" (( \002 8: 保留职员信息 ))\n"); printf(" (( \002 9: 读取职员信息
22、 ))\n"); printf(" (( \002 0: 退出系统 ))\n"); printf(" ************************************************\n"); do { printf("\n \004请输入指令(0~9):"); scanf("%d",&choice); /*输入选择数字*/ }wh
23、ile(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; cas
24、e 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; /*横坐标,表示列数*/ coor
25、d.Y=y; /*纵坐标,表示行数*/ SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); } 6.4表头showtable1()和表尾showtable2() 用于打印表格头和尾。 /********************************************* *表头 *********************************************/ void showtable1() { printf("*"); int i; for(i=0
26、i<78;i++) printf("="); printf("*"); printf("| 工号 | 姓名 | 性别 | 年纪 | 学历 | 职位 | 工资 | 电话 | 住址 |"); printf("|------+--------+------+------+------+------+------+----------+----------------|"); } /********************************************* *表尾 *******************************
27、/ void showtable2() { int i; printf("*"); for(i=0;i<78;i++) printf("="); printf("*"); } 6.5登录界面 用于管理员登录,若密码输入正确则进入菜单。 /********************************************* *登录 **********************************************/ void enter() { char str1[]={"123"}; char
28、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);/*将缓冲区
29、内容传送到stdin中,即清理缓冲区内容*/ enter(); } } 6.6创建职员统计 用于第一次输入职员信息统计。 /***************************************** *创建职员信息 ******************************************/ void creat() /*创建职员信息统计*/ { int i,r; system("cls"); /*清屏*/ printf("\n\n \004请输入此次所录入职员信息数:"); s
30、canf("%d",&r);
n+=r; /*r为目前次输入职员信息数,n为录入职员信息数总数*/
for(i=0;i 31、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请输 32、入住址:");
scanf("%s",sta[i].addr);
}
printf("\n\n \002信息成功录入!\n");
printf(" \004请按任意键返回主菜单:");
fflush(stdin); /*清除缓存*/
getch(); /*接收任意一个字符*/
}
6.7浏览统计
用于查看内存中职员信息统计。
/*****************************************
*浏览职员信息
******************************************/
void d 33、isplay()
{
int i;
system("cls");
gotoxy(16,2);
printf("****************全体职员信息****************\n");
gotoxy(0,3);
showtable1();
for(i=0;i 34、].salary,sta[i].tel,sta[i].addr);
showtable2();
printf("\n \004请按任意键返回主菜单:");
fflush(stdin);
getch();
}
6.8查询统计
用于查询职员信息统计,有四种查询方法。
/**********************************
*查询所需职员信息(4种方法)
**********************************/
void search()
{
int a,t;
char str[20];
system("cls");
35、
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: 按电话查询 ) 36、)\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 37、请输入姓名:");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表示查询方法*/
if(a!=-1)
{
printf("\n \002已查到该职员信息,内容为:\n");
showtable1();
printf("| %- 38、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);
showtable2();
}
else printf("\n\n \004对不起,文件中没有此职员统计。\n");
printf(" \004请按任意键返回主菜单:");
fflush(stdin);
getch();
}
6.9查找指定 39、统计
用于查找匹配统计,将str[100]和sta[i].[*]中字符串比较,若二者一样返回统计号,若二者不一样返回-1。
/*****************************************
*查找指定统计
******************************************/
int find(char str[30],int t) /* t表示 1为工号 2为姓名 3为工资 4为电话*/
{
int i;
for(i=0;i 40、t==2&&strcmp(str,sta[i].name)==0)||(t==3&&strcmp(str,sta[i].salary)==0)||(t==4&&strcmp(str,sta[i].tel)==0))
return(i); /*两字符串若一样,strcmp(str,sta[i].[*]返回零值*/
return(-1);
}
6.10修改统计
用于修改职员信息统计,有两种方法查找匹配统计。
/**************************************
*修改原有职员信息
************************** 41、/
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("(( 42、 \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;
43、
}
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);
showtable2() 44、
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);
print 45、f(" \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请输入住址:" 46、);
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( 47、" \004选择错误,请按任意键返回主菜单:");
fflush(stdin);
getch();
}
}
else
{
printf("\n\n \004对不起,文件中没有此职员统计。\n");
printf(" \004请按任意键返回主菜单:");
fflush(stdin);
getch();
}
}
6.11删除统计
用于删除指定职员信息统计,有两种方法查找匹配统计。
/**************************************
*删除原有职员信息
************* 48、/
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);
print 49、f("(( \002 2: 按姓名删除 ))\n");
gotoxy(20,12);
printf("************************************");
gotoxy(24,13);
printf("\004请输入您期望删除方法(1~2):");
scanf("%d",&j);
system("cls");
switch(j)
{
case 1:printf("\n\n \004请输入要删除工号:");break;
case 2:printf("\n\n \004请输入要删除姓名:") 50、break;
}
scanf("%s",str);
a=find(str,j);
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);
show
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818