资源描述
职工信息管理系统C语言课程设计源代码
44
2020年4月19日
文档仅供参考,不当之处,请联系改正。
课程设计报告
(本科)
课程:
高级语言课程设计
学号:
姓名:
班级:
教师:
时间:
计算机科学与技术系
设计名称:
职工信息管理系统
设计内容、目的与要求:
目的:要求熟练掌握C语言的基本知识和编辑技能。基本掌握结构化程序设计的基本思路和方法。经过编写学生的C语言职工信息管理系统,便于对职工的信息进行管理。经过对职工C语言信息管理系统设计,训练综合运用函数的自定义,数组,结构体等,并提高程序设计的能力。
要求:设计一个职工信息管理系统,使之能提供以下功能:
1、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
2、输入功能:职工信息录入(职工信息用文件保存),能够一次完成若干条记录的输入。
3、浏览功能:完成对全部职工信息的显示。
4、查找功能:①完成按职工的职工号查询职工的相关信息,并显示。
②完成按职工的学历查询职工的相关信息,并显示。
③完成按职工的电话号码查询职工的相关信息,并显示。
5、删除功能:①经过输入职工的姓名完成对该名职工的信息进行删除。
②经过输入职工号完成对该名职工的信息进行删除。
6、添加功能:完成添加新职工的信息的任务。
7、修改功能:①经过输入职工的姓名完成对该名职工的信息进行修改。
②经过输入职工号完成对该名职工的信息进行修改。
8、退出职工信息管理系统。
计划与进度安排:
12月8日至 12月15日 仔细看数据库相关知识,经过上网查资料找思路。
12月16日至 12月20日 完成设计思路并作出草稿,把主函数和各调用函数模块编出来。
12月21日至 1月1日 逐步实现各模块的功能化,把整个程序大致功能都实现。
1月2日至 1月6日 修改并完善各功能,写好电子实验报告,并准备提交验收。
设计过程、步骤(可加页):
一.功能结构
职工信息管理系统
开始
1按职工号查询
2按学历查询
3按号码查询
2按职工姓名删除
1按职工号删除
2按职工姓名修改
1按职工号修改
菜单
根据菜单输入的值选择程序
1
录入职工信息
2
浏览职工信息
3
查询职工信息
5
添加职工信息
4
删除职工信息
6
修改职工信息
7
退出
二、设计说明
1.这个程序要用到结构体.
struct employee{…………};
2.函数的声明和调用:
void menu(); //菜单函数
void input(); // 录入函数
void save(int m); //保存文件函数
void display(); //浏览函数
void del(); // 删除函数
void del_name(); //按姓名删除函数
void del_num(); //按职工号删除函数
void add(); //添加函数
void search(); //查询函数
void search_num(); //按职工号码查询函数
void search_xueli(); //按学历查询函数
void search_tel(); //按号码查询函数
void modify(); // 修改函数
void modify_num(); //按员工号修改函数
void modify_name(); //按姓名修改函数
3.选择功能,用到了do..while语句和switch,do..while是进行循环的,switch是用来选择的
do
{
if(n>=1&&n<=7)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
}
while(flag==0);
switch(n)
{
case 1:printf(" 输入职工信息");printf("\n");input();break;
case 2:printf(" 浏览职工信息");printf("\n");display();break;
case 3:printf(" 查询职工信息");printf("\n");search();break;
case 4:printf(" 删除职工信息");printf("\n");del();break;
case 5:printf(" 添加职工信息");printf("\n");add();break;
case 6:printf(" 修改职工信息");printf("\n");modify();break;
case 7:exit(0);break;
default :break;
}
4.定义的函数完成功能的实现:录入职工信息,浏览职工信息,查询职工信息,修改职工信息,添加职工信息,删除职工信息。
5.执行程序。
结果与分析(能够加页):
功能上有对职工信息的增加,删除,浏览,查询,修改等简单的功能.
使用说明及运行实例
1.运行程序,进入职工信息管理系统的主菜单:
图1:进入主菜单界
2.输入数字“1”进行录入职工信息:
图2:录入职工信息
3.输入“y”返回主菜单(界面同图1)。
4.输入“2”浏览职工信息:
图3:浏览职工信息
5.输入“y”后继续,输入“3”进行查询职工信息:
图4:按职工号查询职工信息
5:按学历查询职工信息
图6:按电话号码查询职工信息
6.进入主菜单,输入“4”进行删除职工信息:
图7:按姓名删除职工信息
图8:按职工号删除职工信息
7.进入主菜单输入“5”进行添加职工信息:
图9:添加职工信息
8.进入主菜单输入“6”进行修改职工信息:
图10:按姓名修改职工信息
图11:按职工号修改职工信息
9.进入主菜单输入”7”退出职工信息管理系统:
图12:退出系统
优点是:基本实现了程序的多功能,对与查询职工信息提供了三种方法,对与修改和删除职工信息提供了两种方法,功能多种多样。旗帜变量的使用也是优点之一;这个程序用到了的结构体,整个程序简单,易懂。
缺点是:保存职工信息有限,程序段比较臃长。
设计体会与建议:
经过这次的课程设计,我更加了解C语言,学会更好的使用C语言函数调用和结构体等,把学过的知识运用于实践中,而不但仅停留于对课本的单纯理解;这次设计也让我知道我懂的太少,要学习的东西还有很多。想完成一项功能就要用很复杂的语句去实现,因此整个程序变的很长,复杂,可是结构体,数组,指针等的灵活运用又可使程序变的易懂。另外,团队的合作也是成功的一部分!
在编写代码时一开始没有运用有意义的函数名和变量,结果找起来和修改好麻烦,也使别人看不懂。在整个课程设计中,我认为最重要的就是耐心和细心。细心,就是在编写过程中注意拼写,仔细编写程序;耐心,就是程序编译中出现很多错误的时候能够耐心去修改,只有这样,才能很好的完成程序。
虽然在整个过程中出现了不少错误,但最终还是圆满完成了,此次程序设计的经历让我学到了太多,以前好多不懂的也都理解了。也学会了作为大学生我们也应该学会不但从课堂上学习知识,还应该学会自学。
附录:
#include<stdio.h> //标准输入输出函数库
#include<string.h> //字符串函数库
#include<stdlib.h>
struct employee
{
int num; //职工号
char name[20]; //姓名
char sex; //性别
int age; //年龄
char xueli[30]; //学历
int wage; //工资
char addr[30]; //家庭住址
char tel[20]; //联系电话
}employee[100]; //定义一个结构体
int main() //函数主体
{
void menu(); //菜单函数
void input(); // 录入函数
void save(int m); //保存文件函数
void display(); //浏览函数
void del(); // 删除函数
void del_name(); //按姓名删除函数
void del_num(); //按职工号删除函数
void add(); //添加函数
void search(); //查询函数
void search_num(); //按职工号码查询函数
void search_xueli(); //按学历查询函数
void search_tel(); //按号码查询函数
void modify(); // 修改函数
void modify_num(); //按员工号修改函数
void modify_name(); //按姓名修改函数
int n,flag;
char a;
menu();
printf("请选择你需要操作的步骤(1--7):\n");
scanf("%d",&n);
do
{
if(n>=1&&n<=7)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
}
while(flag==0);
while(flag==1)
{
switch(n)
{
case 1:printf(" ◆◆◆输入职工信息◆◆◆\n");printf("\n");input();break;
case 2:printf(" ◆◆◆浏览职工信息◆◆◆\n");printf("\n");display();break;
case 3:printf(" ◆◆◆查询职工信息◆◆◆\n");printf("\n");search();break;
case 4:printf(" ◆◆◆删除职工信息◆◆◆\n");printf("\n");del();break;
case 5:printf(" ◆◆◆添加职工信息◆◆◆\n");printf("\n");add();break;
case 6:printf(" ◆◆◆修改职工信息◆◆◆\n");printf("\n");modify();break;
case 7:exit(0);break;
default :break;
}
getchar();
printf("\n");
printf("是否继续进行(y or n):\n");
scanf("%c",&a);
if(a=='y')
{
flag=1;
system("cls"); //清屏
menu(); //调用菜单函数
printf("请再次选择你需要操作的步骤(1--7):\n");
scanf("%d",&n);
printf("\n");
}
else
exit(0);
}
}
void menu() //菜单函数
{
printf(" ************欢迎进入职工信息管理系统**********\n");
printf(" 1.录入职工信息");
printf(" 2.浏览职工信息\n");
printf(" 3.查询职工信息");
printf(" 4.删除职工信息\n");
printf(" 5.添加职工信息");
printf(" 6.修改职工信息\n");
printf(" 7.退出\n");
printf(" ********************谢谢使用******************\n");
printf("\n");
printf("\n");
}
void input() //录入函数
{
int i,m;
printf("请输入需要创立信息的职工人数(1--100):\n");
scanf("%d",&m);
for (i=0;i<m;i++)
{
printf("请输入职工号: ");
scanf("%d",&employee[i].num);
printf("请输入姓名: ");
scanf("%s",employee[i].name);
getchar();
printf("请输入性别(f--女 m--男): ");
scanf("%c",&employee[i].sex);
printf("请输入年龄: ");
scanf("%d",&employee[i].age);
printf("请输入学历: ");
scanf("%s",employee[i].xueli);
printf("请输入工资: ");
scanf("%d",&employee[i].wage);
printf("请输入住址: ");
scanf("%s",employee[i].addr);
printf("请输入电话: ");
scanf("%s",employee[i].tel);
printf("\n");
}
printf("\n创立完毕!\n");
save(m);
}
void save(int m) //保存文件函数
{
int i;
FILE*fp;
if ((fp=fopen("employee_list.txt","wb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
for (i=0;i<m;i++) //将内存中职工的信息输出到磁盘文件中去
if (fwrite(&employee[i],sizeof(struct employee),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
int load() //导入函数
{
FILE*fp;
int i=0;
if((fp=fopen("employee_list.txt","rb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
else
{
do
{
fread(&employee[i],sizeof(struct employee),1,fp);
i++;
}
while(feof(fp)==0);
}
fclose(fp);
return(i-1);//循环过程中跳出循环时i自动加一,因此要减去一
}
void display() //浏览函数
{
int i;
int m=load();
printf(" 职工号 姓名 性别 年龄 学历 工资 住址 电话 \n");
for(i=0;i<m;i++) //m为输入部分的职工人数
printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,employee[i].name,employee[i].sex,
employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i].tel);
}
void del() //删除函数
{
int t,flag;
do
{
printf("\n按职工号删除请按1; 按姓名删除请按2; 进入主函数请按3\n");
scanf("%d",&t);
if(t>=1&&t<=3)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
}
while(flag==0);
while(flag==1)
{
switch(t)
{
case 1:printf("按职工号删除\n");del_num();break;
case 2:printf("按姓名删除\n");del_name();break;
case 3:main();break;
default:break;
}
}
}
void del_name() //按姓名删除函数
{
int m=load();
int i,j,n,t,flag;
char name[20];
printf("\n 原来的职工信息:\n");
display(); //调用浏览函数
printf("\n");
printf("请输入要删除的职工的姓名:\n");
scanf("%s",name);
for(flag=1,i=0;flag&&i<m;i++)
{
if(strcmp(employee[i].name,name)==0)
{
printf("\n已找到此人,原始记录为:\n");
printf(" 职工号 姓名 性别 年龄 学历 工资 住址 电话 \n");
printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,employee[i].name,employee[i].sex,
employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i].tel);
printf("\n确实要删除此人信息请按1,不删除请按0\n");
scanf("%d",&n);
if(n==1)
{
for(j=i;j<m-1;j++)
{
strcpy(employee[j].name,employee[j+1].name);//strcpy(str1,str2)把str2指向的字符串复制到str1中去
employee[j].num=employee[j+1].num;
employee[j].sex=employee[j+1].sex;
employee[j].age=employee[j+1].age;
strcpy(employee[j].xueli,employee[j+1].xueli);
employee[j].wage=employee[j+1].wage;
strcpy(employee[j].addr,employee[j+1].addr);
strcpy(employee[j].tel,employee[j+1].tel);//把下一员工的信息复制到上一个员工信息的位置中去
}
flag=0;
}
}
}
if(!flag) //flag取逻辑反,及flag==0
m=m-1;
else
printf("\n对不起,查无此人!\n");
printf("\n 浏览删除后的所有职工信息:\n");
save(m); //调用保存函数
display(); //调用浏览函数
printf("\n不在删除请按0, 返回删除菜单请按1,继续按姓名删除请按2\n");
scanf("%d",&t);
switch(t)
{
case 0:main();break;
case 1:del();break;
case 2:break;
default :break;
}
}
void del_num() //按职工号删除函数
{
int m=load();
int i,j,n,t,flag;
int num;
printf("\n 原来的职工信息:\n");
display(); //调用浏览函数
printf("\n");
printf("请输入要删除的职工的职工号:\n");
scanf("%d",&num);
for(flag=1,i=0;flag&&i<m;i++)
{
if(employee[i].num==num)
{
printf("\n已找到此人,原始记录为:\n");
printf(" 职工号 姓名 性别 年龄 学历 工资 住址 电话 \n");
printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,employee[i].name,employee[i].sex,
employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i].tel);
printf("\n确实要删除此人信息请按1,不删除请按0\n");
scanf("%d",&n);
if(n==1)
{
for(j=i;j<m-1;j++)
{
strcpy(employee[j].name,employee[j+1].name);//strcpy(str1,str2)把str2指向的字符串复制到str1中去
employee[j].num=employee[j+1].num;
employee[j].sex=employee[j+1].sex;
employee[j].age=employee[j+1].age;
strcpy(employee[j].xueli,employee[j+1].xueli);
employee[j].wage=employee[j+1].wage;
strcpy(employee[j].addr,employee[j+1].addr);
strcpy(employee[j].tel,employee[j+1].tel);//把下一员工的信息复制到上一个员工信息的位置中去
}
flag=0;
}
}
}
if(!flag) //flag取逻辑反,及flag==0
m=m-1;
else
printf("\n对不起,查无此人!\n");
printf("\n 浏览删除后的所有职工信息:\n");
save(m); //调用保存函数
display(); //调用浏览函数
printf("\n不在删除请按0,返回删除菜单请按1,继续按职工号删除请按2\n");
scanf("%d",&t);
switch(t)
{
case 0:main();break;
case 1:del();break;
case 2:break;
default :break;
}
}
void add() //添加函数
{
FILE*fp;
int n;
int count=0;
int i;
int m=load();
printf("\n 原来的职工信息:\n");
display();
printf("\n");
fp=fopen("emploee_list.txt","a");
printf("请输入想增加的职工数:\n");
scanf("%d",&n);
for (i=m;i<(m+n);i++)
{
printf("\n 请输入新增加职工的信息:\n");
printf("请输入职工号: ");
scanf("%d",&employee[i].num);
printf("\n");
printf("请输入姓名: ");
scanf("%s",employee[i].name);
getchar();
printf("请输入性别(f--女 m--男): ");
scanf("%c",&employee[i].sex);
printf("请输入年龄: ");
scanf("%d",&employee[i].age);
printf("请输入学历: ");
scanf("%s",employee[i].xueli);
printf("请输入工资: ");
scanf("%d",&employee[i].wage);
printf("请输入住址: ");
scanf("%s",employee[i].addr);
printf("请输入电话: ");
scanf("%s",employee[i].tel);
printf("\n");
count=count+1;
printf("已增加的人数:\n");
printf("%d\n",count);
}
printf("\n添加完毕!\n");
m=m+count;
printf("\n浏览增加后的所有职工信息:\n");
printf("\n");
save(m);
display();
fclose(fp);
}
void search()//查询函数
{
int t,flag;
do
{
printf("\n按职工号查询请按1; 按学历查询请按2; 按电话号码查询请按3; 进入主函数请按4\n");
scanf("%d",&t);
if(t>=1&&t<=4)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
}
while(flag==0);
while(flag==1)
{
switch(t)
{
case 1:printf("按职工号查询\n");search_num();break;
case 2:printf("按学历查询\n");search_xueli();break;
case 3:printf("按电话号码查询\n");search_tel();break;
case 4:main();break;
default:break;
}
}
}
void search_num() //按职工号码查询函数
{
int num;
int i,t;
int m=load();
printf("请输入要查找的职工号:\n");
scanf("%d",&num);
for(i=0;i<m;i++)
if(num==employee[i].num)
{
printf("\n已找到此人,其记录为:\n");
printf(" 职工号 姓名 性别 年龄 学历 工资 住址 电话 \n");
printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,employee[i].name,employee[i].sex,
employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i].tel);
break;
}
if(i==m)
printf("\n对不起,查无此人\n");
printf("\n");
printf("不在查询请按0,返回查询函数请按1,继续查询职工号请按2\n");
scanf("%d",&t);
switch(t)
{
case 0:main();break;
case 1:search();break;
case 2: break;
default:break;
}
}
void search_xueli() //按职工号码查询函数
{
char xueli[30];
int i,t,n=0;
int m=load();
printf("请输入要查找的学历:\n");
scanf("%s",xueli);
for(i=0;i<m;i++)
if(strcmp(employee[i].xueli,xueli)==0)
{
printf("\n已找到,其记录为:\n");
printf(" 职工号 姓名 性别 年龄 学历 工资 住址 电话 \n");
printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,employee[i].name,employee[i].sex,
employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i].tel);
n++;
}
if(i==m&&n==m)
printf("\n对不起,查无此人\n");
pr
展开阅读全文