实训报告
题 目: 人力资源管理系统
院 系: 信息科技学院
专 业: 计算机科学与技术
姓 名: 黄富云
学 号: 1151210119
指导教师: 王小琼
日 期: 20##年9月15日
桂林电子科技大学信息科技学院
前 言
课程设计环节是应用型本科院校非常重要的一个教学环节,是学完一门课后应用本课知识及以前的知识积累而进行的综合性、开放性的训练。通过课程设计,不仅能够使学生得到系统的技能训练,巩固和加强所学得专业理论知识,而且能够培养学生工程意识、创新能力、团队精神等综合素质,培养学生的设计能力和解决实际问题的能力。
C语言由于其强大的功能,丰富的表达能力,高效的代码,良好的移植性和灵活性,自1972年问世以来,经久不衰,即使现在出现了面向对象的程序设计方法和开发工具,但它仍然是人们学习程序设计的首选语言,用它训练和提高编程技术,以及开发应用程序等。
我们通过《C语言程序设计》这门课程的学习,已经能编写解决小问题的程序,对程序的开发也有了初步的认识,还掌握了C 语言的基本语法,这一过程确确实实令我们感到欣喜,有点计算机可以完成自我任务的成就感。但是,对于程序设计而言,学习C 的步伐不应该停留于此。我们最终的目的应该是掌握开发大型综合程序的方法,即遵循软件工程的开发步骤和结构化程序设计思想,用C 语言开发出解决复杂问题的大型综合程序。可是对于多数学生来说,学习了C语言后,除了应付各种考试之外,别无它用,对Turbo C语言丰富的函数知之甚少,加上DOS环境所限,因而对C语言兴趣不大,也感到C语言比较难以掌握。
本实训就是为了让学生在学完C语言后进一步了解C语言的知识,掌握C语言在软件开发方面的使用方法,希望通过此次实训,不仅能提高学生学习C语言的兴趣,更为今后学习其它专业知识及开发程序打下坚实的基础。
本指导书中有些内容借鉴了互联网上相关程序的设计思想,在此对相关者表示衷心的感谢。
由于时间、经验及水平的原因,不当、不足之处,请大家提出宝贵意见。
编者
我所选的题目让我更为了解了实用程序的开发过程,运用了之前所学C语言的文件和数组的各种基本操作。通过本程序的制作,使我能对C语言的文件操作有一个更深刻的了解,通过课程之外的知识和课内知识的结合实现了对通信录信息的管理,为今后C语言的学习和开发打下了基础。同时我所编写的程序中涉及结构体、数组、文件等方面的知识。
1、 问题分析
我需要制作一个可以存储信息和管理信息的程序。那么在系统中这些信息就包括了,名字、编号、性别、年龄、入职时间、所属部门、住址这几个信息。那么我制作了一个界面,通过选择对应功能来满足需求。
void menu()/* 界面*/
{
int choice;
printf("\n\n 人力资源管理系统 \n\n");
printf(" name:黄富云 classes:软件一班 number:1151210119 \n");
printf(" ********************主菜单功能**************** \n");
printf(" ********************************************** \n");
printf(" *** *** \n");
printf(" *** 1.查询员工信息 *** \n");
printf(" *** 2.修改员工信息 *** \n");
printf(" *** 3.增加员工信息 *** \n");
printf(" *** 4.按编号删除信息 *** \n");
printf(" *** 5.显示当前信息 *** \n");
printf(" *** 6.保存当前信息 *** \n");
printf(" *** 7.退出 0.刷新 *** \n");
printf(" ********************************************** \n");
printf(" ********************************************** \n");
printf("\n");
printf(" **查询前请'0'刷新系统,增加信息后请保存** \n");
printf("\n");
printf("请选择菜单编号:\n");
scanf("%d",&choice);
switch(choice)
{
case 0:readfile();break;
case 1:search();break;
case 2:change();save;break;
case 3:add();save;break;
case 4:del();save;break;
case 5:display();break;
case 6:save();break;
case 7:k=0;break;;
default:printf("请在0-7之间选择\n");
}
}
效果图如下:
那么接下来,我定义了我的结构。
2.总体程序分析
我以类似于树状图的结构来构建我的程序,顶端为主函数,其次使它调用界面,在通过界面的选择来开启个个模块的小程序。
图如下
的
系统设计构想图
二,数据结构设计
#include<stdio.h> /*I/O函数*/
#include<stdlib.h> /*其它说明*/
#include<string.h> /*字符串函数*/
#define BUFLEN 100 /* 缓冲区最大字符数*/
#define LEN 15 /* 编号和姓名最大字符数,实际请更改*/
#define N 100 /* 最大员工人数,实际请更改*/
struct record /*结构体*/
{
char num[LEN+1]; /* 编号*/
char name[LEN+1]; /* 姓名*/
int age; /* 年龄*/
char sex[3]; /* 性别*/
char tell[LEN+1]; /* 电话*/
char worktime[LEN+1]; /* 入职时间*/
char section[LEN+1]; /* 所属单位*/
char address[LEN+1]; /* 住址*/
}stu[N];
其中struct record 意为存储员工信息,我将它作为数组的数据域。
三,设定的函数
函数功能描述
1. readfile()
函数原型:void readfile();该函数用于读取文件,录入信息。
2. seek();
函数原型:void chazhao();该函数用于查找员工信息。
4. modify()
函数原型:void xiugai(),该函数用来修改员工信息。
5.sort()
函数原型:void sort(),该函数用于将信息按员工编号顺序排序。
6.insert()
函数原型:void buchong(),该函数用来添加员工信息。
7. del()
函数原型:void del(),该函数用于删除员工信息。
8. display()
函数原型:void display(),该函数用于显示目前已录入的员工信息。
9. save()
函数原型:void save(),该函数用来储存输入的员工信息,将其保存在数据文件rlzy.txt中。
10. menu()
函数原型:void menu(),该函数用来显示系统主界面。
11.main()整个信息管理系统控制部分。
系统实现
“加载头文件,定义结构体、常量和变量,并对它们进行初始化工作。”
#include<stdio.h> /*I/O函数*/
#include<stdlib.h> /*其它说明*/
#include<string.h> /*字符串函数*/
#define BUFLEN 100 /* 缓冲区最大字符数*/
#define LEN 15 /* 编号和姓名最大字符数,实际请更改*/
#define N 100 /* 最大员工人数,实际请更改*/
“定义与联系人有关的信息”
struct record /*结构体*/
{
char num[LEN+1]; /* 编号*/
char name[LEN+1]; /* 姓名*/
int age; /* 年龄*/
char sex[3]; /* 性别*/
char tell[LEN+1]; /* 电话*/
char worktime[LEN+1]; /* 入职时间*/
char section[LEN+1]; /* 所属单位*/
char address[LEN+1]; /* 住址*/
}stu[N];
定义函数说明和全局变量
int k=1,n,m; /* 定义全局变量*/
void readfile();/* 函数声明*/
void search ();
void change();
void add();
void del();
void display();
void save();
void menu();
主函数
main()函数主要对整个程序控制,以及相关功能模块的使用。
int main()
{ while(k)
menu();
readfile();
return 0;
}
主菜单界面
void menu()/* 界面*/
{
int choice;
printf("\n\n 人力资源管理系统 \n\n");
printf(" name:黄富云 classes:软件一班 number:1151210119 \n");
printf(" ********************主菜单功能**************** \n");
printf(" ********************************************** \n");
printf(" *** *** \n");
printf(" *** 1.查询员工信息 *** \n");
printf(" *** 2.修改员工信息 *** \n");
printf(" *** 3.增加员工信息 *** \n");
printf(" *** 4.按编号删除信息 *** \n");
printf(" *** 5.显示当前信息 *** \n");
printf(" *** 6.保存当前信息 *** \n");
printf(" *** 7.退出 0.刷新 *** \n");
printf(" ********************************************** \n");
printf(" ********************************************** \n");
printf("\n");
printf(" **查询前请'0'刷新系统,增加信息后请保存** \n");
printf("\n");
printf("请选择菜单编号:\n");
scanf("%d",&choice);
switch(choice)
{
case 0:readfile();break;
case 1:search();break;
case 2:change();save;break;
case 3:add();save;break;
case 4:del();save;break;
case 5:display();break;
case 6:save();break;
case 7:k=0;break;;
default:printf("请在0-7之间选择\n");
}
}
显示联系人信息
void display()
{
int i;
system("cls");
printf("当前显示信息为:\n");
printf("编号 姓名 年龄 性别 电话 入职时间 所属部门 地址\n");
for(i=0;i<n;i++)
{
printf("%2s %4s %d %2s %9s %5s %5s %8s\n",stu[i].num,stu[i].name,
stu[i].age,stu[i].sex,stu[i].tell,
stu[i].worktime,stu[i].section,stu[i].address);
}
}
通过联系人编号与姓名来实现查找
void search()/*查找*/
{
int item,flag;
char s1[21]; /* 以姓名和编号最长长度+1为准*
printf("\n");
printf(" 1.按编号查询 \n");
printf(" 2.按姓名查询 \n");
printf(" 3.退出本菜单 \n");
printf("\n");
while(1)
{
printf("请选择子菜单编号:");
scanf("%d",&item);
flag=0;
switch(item)
{
case 1:
printf("请输入员工的编号:");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].num,s1)==0)
{
flag=1;
printf("编号 姓名 年龄 性别 电话 入职时间 所属部门 地址\n");
printf("\n");
printf("%2s %4s %d %2s %9s %5s %5s %8s\n",stu[i].num,stu[i].name,
stu[i].age,stu[i].sex,stu[i].tell,
stu[i].worktime,stu[i].section,stu[i].address);
}
if(flag==0)
printf("该编号不存在!");break;
case 2:
printf("请输入员工的姓名:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].name,s1)==0)
{
flag=1;
printf("编号 姓名 年龄 性别 电话 入职时间 所属部门 地址\n");
printf("\n");
printf("%2s %4s %d %2s %9s %5s %5s %8s\n",
stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].tell,
stu[i].worktime,stu[i].section,stu[i].address);
}
if(flag==0)
printf("该姓名不存在!\n");break;
case 3:return;
default:printf("请在1-3之间选择\n");
}
}
}
修改联系人信息
void change()/*修改信息*
{
int i,item,num;
char sex1[3],s1[LEN+1],s2[LEN+1]; /* 以姓名和编号最长长度+1为准*
printf("请输入要修改员工编号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].num,s1)==0) /*比较字符串是否相等*/
num=i;
printf("\n");
printf("1.修改姓名\n");
printf("2.修改年龄\n");
printf("3.修改性别\n");
printf("4.修改电话\n");
printf("5.修改入职时间\n");
printf("6.修改所属部门\n");
printf("7.修改地址\n");
printf("8.退出本菜单\n");
printf("\n");
while(1)
{
printf("请选择子菜单编号:");
scanf("%d",&item);
switch(item)
{
case 1:
printf("请输入新的姓名:\n");
scanf("%s",s2);
strcpy(stu[num].name,s2); break;
case 2:
printf("请输入新的年龄:\n");
scanf("%d",&stu[num].age);break;
case 3:
printf("请输入新的性别:\n");
scanf("%s",sex1);
strcpy(stu[num].sex,sex1); break;
case 4:
printf("请输入新的电话:\n");
scanf("%s",s2);
strcpy(stu[num].tell,s2); break;
case 5:
printf("请输入新的入职时间:\n");
scanf("%s",s2);
strcpy(stu[num].worktime,s2); break;
case 6:
printf("请输入新的所属部门:\n");
scanf("%s",s2);
strcpy(stu[num].section,s2); break;
case 7:
printf("请输入新的地址:\n");
scanf("%s",s2);
strcpy(stu[num].address,s2); break;
case 8:return;
default:printf("请在1-8之间选择\n");
}
}
}
添加联系人信息
void add()/*加入函数*/
{void sort();
int i=n,j,flag;
printf("请输入待增加的员工人数:\n");
scanf("%d",&m);
do
{
flag=1;
while(flag)
{
flag=0;
printf("请输入第%d 个员工编号:\n",i+1);
scanf("%s",stu[i].num);
for(j=0;j<i;j++)
if(strcmp(stu[i].num,stu[j].num)==0)
{
printf("已有该编号,请检查后重新登入!\n");
flag=1;
break; /*如果重复编号,则可以重新输入 方便快捷*/
}
}
printf("请输入第%d 个员工的姓名:\n",i+1);
scanf("%s",stu[i].name);
printf("请输入第%d 个员工的年龄:\n",i+1);
scanf("%d",&stu[i].age);
printf("请输入第%d 个员工的性别:\n",i+1);
scanf("%s",stu[i].sex);
printf("请输入第%d 个员工的电话:\n",i+1);
scanf("%s",stu[i].tell);
printf("请输入第%d 个员工的入职时间:\n",i+1);
scanf("%s",stu[i].worktime);
printf("请输入第%d 个员工的所属部门:\n",i+1);
scanf("%s",stu[i].section);
printf("请输入第%d 个员工的地址:\n",i+1);
scanf("%s",stu[i].address);
if(flag==0)
{
i=i;
i++;
}
}
while(i<n+m);
n+=m;
printf("录入完毕!\n\n");
sort();
}
删除联系人信息
void del()/*删除函数*/
{
int i,j,flag=0;
char s1[LEN+1];
system ("cls");
printf("请输入要删除的员工编号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].num,s1)==0)
{
flag=1;
for(j=i;j<n-1;j++)
stu[j]=stu[j+1];
}
if(flag==0)
printf("该编号不存在!\n");
if(flag==1)
{
printf("删除成功,显示结果请选择菜单\n");
n--;
}
}
按编号进行对联系人的排序
void sort()/*按编号排序*/
{
int i,j,*p,*q,s;
char temp[10];
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--)
if(strcmp(stu[j-1].num,stu[j].num)>0)
{
strcpy(temp,stu[j-1].num);
strcpy(stu[j-1].num,stu[j].num);
strcpy(stu[j].num,temp);
strcpy(temp,stu[j-1].name);
strcpy(stu[j-1].name,stu[j].name);
strcpy(stu[j].name,temp);
strcpy(temp,stu[j-1].sex);
strcpy(stu[j-1].sex,stu[j].sex);
strcpy(stu[j].sex,temp);
strcpy(temp,stu[j-1].tell);
strcpy(stu[j-1].tell,stu[j].tell);
strcpy(stu[j].tell,temp);
strcpy(temp,stu[j-1].worktime);
strcpy(stu[j-1].worktime,stu[j].worktime);
strcpy(stu[j].worktime,temp);
strcpy(temp,stu[j-1].section);
strcpy(stu[j-1].section,stu[j].section);
strcpy(stu[j].section,temp);
strcpy(temp,stu[j-1].address);
strcpy(stu[j-1].address,stu[j].address);
strcpy(stu[j].address,temp);
p=&stu[j-1].age;
q=&stu[j].age;
s=*q;
*q=*p;
*p=s;
}
}
}
保存信息
void save()
{ int i; FILE *fp;
fp=fopen("e:\\rlzy.txt","w");
for(i=0;i<n;i++)
{ fprintf(fp,"%s %s %d %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].tell,
stu[i].worktime,stu[i].section,stu[i].address);
}
fclose(fp);
}
程序效果与调试
功能一添加信息
我选择3 添加,然后输入待添加人数 2人此为第一人
当第二人编号重复时,会有提示,这是可以继续输入,方便快捷,是我这个程序得意之处之一。然后显示录入完毕,返回界面。
功能一删除信息
功能一查找信息
功能一显示所有信息
功能一修改
功能一保存
系统维护
通过测试与调试确认程序无错时,我觉得可以松一口气,把软件交付供用户使用,但是在软件的使用过程中还会面临更加漫长的工作,即软件维护。一般维护的工作有:更改使用中发现的错误;为适应实际环境而对程序进行修改;为满足新的需求而对程序作必要的改进等等。毕竟水平有限…
来个总结吧…
总结
开发经验
通过对本题目的开发,体会到要掌握以下几点内容。
l 设计风格,按树状分布“自顶向下,逐步细化,模块化”的方法进行设计。
l 不能随意修改代码而不备份,一定要做好备份工作!
l 定义函数时,应选好参数的个数和数据类型。
l 文件使用方法。文件使用完毕后应及时关闭。
遇到的问题
在前期编写方面还算较为顺利,但在后期的调试过程中,我无意修改了某个程序段而导致了“年龄”显示的乱码…仔细查找,找同学帮忙都没有结果。这个问题后来我通过重新编写仔细核对把它解决了,但是自己也不知道问题出在哪里。
感想和心得体会
这次实训让我明白了书到用时方恨少,很多想做的功能和构想都由于自己的水平有限而不能实现。发现自己的知识竟是如此贫乏,顿时感到了压力的存在,从而也激发了我的学习热情。它会成为我今后不断进取、永不懈怠的动力。
那么在今后的学习中,我也明白了如何去提高自己的C语言水平。首先,基本知识一定要掌握好。再者,要多和别人交流,这样才能进步得更快。最重要的一点,就是一定要勤快,多尝试少问为什么,很多程序段对于我们来说是十分陌生的,与其一味的去了解它的概念,不如多研究一下它的实例。每次学习到新的东西后,要及时跟进相应知识,不然学不好C语言。我一遍又一遍的看着我的成果,觉得这仅仅是一个开始,实训的结束并不是学习的终结,而是让我将我领入了C语言编程的大门。
参考文献
[1]韩旭 C语言从入门到精通 清华大学出版社 2010
[2] 谭浩强. C程序设计(第三版). 清华大学出版社, 2005
[3]孙志刚 C语言大学实用教程学习指导 电子工业出版社 2008
等等一些网络上的资料