职工信息管理系统设计C语言
程序设计课程设计报告
职工信息管理系统设计
专业
计算机科学与技术 (软件工程(
NIIT )
)
学生姓名
班级 学
号
指导教师 完成日期
2011年7月
目录
1课程设计目的 (1)
2课程设计内容 (1)
3设计流程图 (1)
4源程序清单 (2)
5小结 (21)
职工信息管理系统的设计
1课程设计目的
1.加深对《C语言程序设计》课程知识的理解,掌握C语言应用程序的开发方法和步骤;
2.进一步掌握和利用C语言进行程序设计的能力;
3.进一步理解和运用结构化程序设计的思想和方法;
4.初步掌握开发一个小型实用系统的基本方法;
5.学会跳是一个较长程序的基本方法;
6.学会利用流程图火N-S图表示算法;
7.掌握书写长须设计开发文档的能力(书写课程设计报告)
2 课程设计内容
设计职工信息管理系统,要求职工心想包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。设计一职工信息管理系统,使之能提供以下功能:
(6)系统以菜单方式工作
(7)职工信息录入功能(职工信息用文件保存)--输入
(8)职工信息浏览功能--输出
(9)查询和排序功能(至少一种查询方式)--算法
(10)按工资查询
(11)按学历查询等
(12)职工信息删除、修改功能(任选项)
3设计流程图
(1)菜单函数
void menu() /*菜单函数*/
{
printf(" ☆☆☆计算机科学与技术软件技术☆☆☆\n");
printf("\n");
printf(" ∮1010704422 杨婷婷∮\n");
printf("\n");
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");
}
(2)录入职工信息
void append()
{
if((fp=fopen("worker.xls","a"))==NULL)
{
printf("\n不能打开该文件!");
exit();
}
printf("\n请输入添加职工信息(姓名、职工号、性别、年龄、学历、职位、工资、电话、地址)\n"); scanf("%s%s%s%s%s%s%s%s%s",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one.age,one.record,one.positio n,one.wanges,one.tel,one.addr);
fprintf(fp,"%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,o ne.age,one.record,one.position,one.wanges,one.tel,one.addr);
fclose(fp);
}
(3)查询职工信息数据查找共分为职工号、姓名等方式查找
void search()
{
int l;
printf("\t\t\t\t*姓名查找按:1*\n");
printf("\t\t\t\t*学历查找按:2*\n");
printf("\t\t\t\t*职工号查按:3*\n");
scanf("%d",&l);
if(l>0&&l<4)
{switch(l)
{
case 1:nameway();
break;
case 2:xueliway();
break;
case 3:numway();
break;
}
printf("\n\n操作完毕!!!");
}
else printf("\t\t\t\t输入有误!!!");
}
void nameway()
{
int k=0;
char nam[8];
printf("\n请输入您要查找的职工姓名:");
scanf("%s",nam);
if((fp=fopen("worker.xls","rb"))==NULL)
{
printf("\n不能打开文件!");
exit();
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s%s%s%s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one.age,one.record,one.p osition,one.wanges,one.tel,one.addr);
if(strcmp(nam,https://www.360docs.net/doc/ef7915310.html,)==0)
{
printf("\n\n已查到,记录为:");
printf("\n%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one .age,one.record,one.position,one.wanges,one.tel,one.addr);
k=1;
}
}
if(k==0)
printf("\n\n对不起,查无此人!。");
fclose(fp);
}
void xueliway()
{int j=0;
char xueli[10];
printf("\t\t\t\t输入你要查询的学历\n");
scanf("%s",xueli);
if((fp=fopen("worker.xls","rb"))==NULL)
{
printf("\n不能打开文件!");
exit();
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s%s%s%s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one.age,one.record,one.p osition,one.wanges,one.tel,one.addr);
if(strcmp(xueli,one.record)==0)
{
printf("\n\n已查到,记录为:");
printf("\n%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one .age,one.record,one.position,one.wanges,one.tel,one.addr);
j=1;
}
}
if(j==0)
printf("\n\n对不起,查无此人!。");
fclose(fp);
}
void numway()
{
int i=0;
char numb[10];
printf("\t\t\t\t输入你要查询的职工号\n");
scanf("%s",numb);
if((fp=fopen("worker.xls","rb"))==NULL)
{
printf("\n不能打开文件!");
exit();
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s%s%s%s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one.age,one.record,one.p osition,one.wanges,one.tel,one.addr);
if(!strcmp(numb,one.num))
{
printf("\n\n已查到,记录为:");
printf("\n%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one .age,one.record,one.position,one.wanges,one.tel,one.addr);
i=1;
}
}
if(!i)
printf("\n\n对不起,查无此人!。");
fclose(fp);
}
(4)修改职工信息
void modify()
{
int m,k=0;
long a;
char namekey[8];
printf("\n请输入您要修改的职工的姓名:");
scanf("%s",namekey);
if((fp=fopen("worker.xls","r+"))==NULL)
{
printf("\n不能打开该文件!");
exit();
}
while(!feof(fp))
{
a=ftell(fp);
fscanf(fp,"%s%s%s%s%s%s%s%s%s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one.age,one.record,one.p osition,one.wanges,one.tel,one.addr);
if(!strcmp(namekey,https://www.360docs.net/doc/ef7915310.html,))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,记录为:");
printf("\n%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one .age,one.record,one.position,one.wanges,one.tel,one.addr);
printf("\n请输入信息(按照姓名、工号、性别、年龄、学历、职位、工资、电话、地址的顺序输入):");
scanf("%s%s%s%s%s%s%s%s%s",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one.age,one.record,one.positio n,one.wanges,one.tel,one.addr);
fseek(fp,a,0);
fprintf(fp,"%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,o ne.age,one.record,one.position,one.wanges,one.tel,one.addr);
}
else
printf("\n对不起,查无此人,无法进行修改。");
fclose(fp);
}
(5)删除职工信息
void delete()
{
int m,k=0;
long a,b;
char namekey[8], valid[4];
printf("\n请输入您要删除的职工姓名:");
scanf("%s",namekey);
if((fp=fopen("worker.xls","r+"))==NULL)
{
printf("\n不能打开该文件!");
exit();
}
while(!feof(fp))
{
a=ftell(fp);
fscanf(fp,"%s%s%s%s%s%s%s%s%s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one.age,one.record,one.p
osition,one.wanges,one.tel,one.addr);
if(strcmp(namekey,https://www.360docs.net/doc/ef7915310.html,)==0)
{
k=1;
break;
}
}
if(k==1)
{
printf("\n已查到,记录为");
printf("\n%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one .age,one.record,one.position,one.wanges,one.tel,one.addr);
printf("\n确实要删除,按1;不删除,按0:");
scanf("%d",&m);
if(m==1)
{
fseek(fp,a,0);
fprintf(fp,"%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n" "","","","","","","","","");
}
}
else
printf("\n对不起,查无此人。");
fclose(fp);
}
(6)数据输出
void output()
{
if((fp=fopen("worker.xls","r"))==NULL)
{
printf("\n不能打开该文件!");
exit();
}
printf("\n\n%20s\n","职工信息管理系统");
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s%s%s%s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one.age,one.record,one.p osition,one.wanges,one.tel,one.addr);
printf("%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n",https://www.360docs.net/doc/ef7915310.html,,one.num,one.sex,one.a ge,one.record,one.position,one.wanges,one.tel,one.addr);
}
fclose(fp);
}
4源程序清单
#include
#include
#include
#include
#define N 100
struct employee
{
int num;
char name[10];
char sex;
int age;
char xueli[30];
int wage;
char addr[30];
long int tel;
}em[100]; /*定义一个结构体*/
void menu();
void input();
void save(int);
void display();
void del();
void add();
void search();
void search_num();
void search_xueli();
void search_tel();
void modify(); /*定义各函数*/
void menu() /*菜单函数*/
{
printf(" ☆☆☆计算机科学与技术软件技术☆☆☆\n");
printf("\n");
printf(" ∮1010704422 杨婷婷∮\n"); printf("\n");
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 main()
{
menu(); /*调用菜单函数*/
int n,flag;
char a;
do
{
printf("请选择你需要操作的步骤(1--7):\n");
scanf("%d",&n);
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;
menu(); /*调用菜单函数*/
printf("请再次选择你需要操作的步骤(1--6):\n");
scanf("%d",&n);
printf("\n");
}
else
exit(0);
}
}
void input() /*录入函数*/
{
int i,m;
printf("请输入需要创建信息的职工人数(1--100):\n");
scanf("%d",&m);
for (i=0;i { printf("职工号: "); if(em[i].num!=em[i-1].num) printf("%8d ",em[i].num); printf("\n"); printf("请输入姓名: "); scanf("%s",em[i].name); getchar(); printf("请输入性别(f--女 m--男): "); scanf("%c",&em[i].sex); printf("请输入年龄: "); scanf("%d",&em[i].age); printf("请输入学历: "); scanf("%s",em[i].xueli); printf("请输入工资: "); scanf("%d",&em[i].wage); printf("请输入住址: "); scanf("%s",em[i].addr); printf("请输入电话: "); scanf("%d",&em[i].tel); printf("\n"); } printf("\n创建完毕!\n"); save(m); } void save(int m) /*保存文件函数*/ { int i; FILE*fp; if ((fp=fopen("employee_list","wb"))==NULL) /*创建文件并判断是否能打开*/ { printf ("cannot open file\n"); exit(0); } for (i=0;i if (fwrite(&em[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","rb"))==NULL) { printf ("cannot open file\n"); exit(0); } else { do { fread(&em[i],sizeof(struct employee),1,fp); i++; } while(feof(fp)==0); } fclose(fp); return(i-1); } void display() /*浏览函数*/ { int i; int m=load(); printf("\n 职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话 \n"); for(i=0;i printf("\n %d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i ].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel); } void del() /*删除函数*/ { 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 { if(strcmp(em[i].name,name)==0) { printf("\n已找到此人,原始记录为:\n"); printf("\n职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话 \n"); printf("\n%d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i]. age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel); printf("\n确实要删除此人信息请按1,不删除请按0\n"); scanf("%d",&n); if(n==1) /*如果删除,则其他的信息都往上移一行*/ { for(j=i;j { strcpy(em[j].name,em[j+1].name); em[j].num=em[j+1].num; em[j].sex=em[j+1].sex; em[j].age=em[j+1].age; strcpy(em[j].xueli,em[j+1].xueli); em[j].wage=em[j+1].wage; strcpy(em[j].addr,em[j+1].addr); em[j].tel=em[j+1].tel; } flag=0; } } } if(!flag) m=m-1; else printf("\n对不起,查无此人!\n"); printf("\n 浏览删除后的所有职工信息:\n"); save(m); /*调用保存函数*/ display(); /*调用浏览函数*/ printf("\n继续删除请按1,不再删除请按0\n"); scanf("%d",&t); switch(t) { case 1:del();break; case 0: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","a"); printf("请输入想增加的职工数:\n"); scanf("%d",&n); for (i=m;i<(m+n);i++) { printf("\n 请输入新增加职工的信息:\n"); printf("请输入职工号: "); if(em[i].num!=em[i-1].num) printf("%8d ",em[i].num); printf("\n"); printf("请输入姓名: "); scanf("%s",em[i].name); getchar(); printf("请输入性别(f--女 m--男): "); scanf("%c",&em[i].sex); printf("请输入年龄: "); scanf("%d",&em[i].age); printf("请输入学历: "); scanf("%s",em[i].xueli); printf("请输入工资: "); scanf("%d",&em[i].wage); printf("请输入住址: "); scanf("%s",em[i].addr); printf("请输入电话: "); scanf("%d",&em[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("请输入要查找的职工号(20001111---20009999):\n"); scanf("%d",&num); for(i=0;i if(num==em[i].num) { printf("\n已找到此人,其记录为:\n"); printf("\n职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话 \n"); printf("\n%d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i]. age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel); break; } if(i==m) printf("\n对不起,查无此人\n"); printf("\n"); printf("返回查询函数请按1,继续查询职工号请按2\n"); scanf("%d",&t); switch(t) { case 1:search();break; case 2: break; default:break; } } void search_xueli() { char xueli[30]; int i,t; int m=load(); printf("请输入要查找的学历:\n"); scanf("%s",xueli); for(i=0;i if(strcmp(em[i].xueli,xueli)==0) { printf("\n已找到,其记录为:\n"); printf("\n职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话 \n"); printf("\n%d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i]. age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel); } if(i==m) printf("\n对不起,查无此人\n"); printf("\n"); printf("返回查询函数请按1,继续查询学历请按2\n"); scanf("%d",&t); switch(t) { case 1:search();break; case 2:break; default :break; } } void search_tel() { long int tel; int i, t; int m=load(); printf("请输入要查找的电话号码:\n"); scanf("%ld",&tel); for(i=0;i if(tel==em[i].tel) { printf("\n已找到此人,其记录为:\n"); printf("\n职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话 \n"); printf("\n%d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i]. age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel); break; } if(i==m) printf("\n对不起,查无此人\n"); printf("\n"); printf("返回查询函数请按1,继续查询电话号码请按2\n"); scanf("%d",&t); switch(t) { case 1:search();break; case 2:break; default :break; } } void modify() /*修改函数*/ { int num; char name[10]; char sex; int age; char xueli[30]; int wage; char addr[30]; long int tel; int b,c,i,n,t,flag; int m=load(); /*导入文件内的信息*/ printf("\n 原来的职工信息:\n"); display(); /* 调用浏览函数*/ printf("\n"); printf("请输入要修改的职工的姓名:\n"); scanf("%s",name); for(flag=1,i=0;flag&&i if(strcmp(em[i].name,name)==0) { printf("\n已找到此人,原始记录为:\n"); printf("\n职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话 \n"); printf("\n%d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i]. age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel); printf("\n确实要修改此人信息请按1 ; 不修改请按0\n"); scanf("%d",&n); if(n==1) { printf("\n需要进行修改的选项\n 1.职工号 2.姓名 3.性别 4.年龄 5.学历6.工资 7.住址 8.电话\n"); printf("请输入你想修改的那一项序号:\n"); scanf("%d",&c); if(c>8||c<1) printf("\n选择错误,请重新选择!\n"); } flag=0; } } if(flag==1) printf("\n对不起,查无此人!\n"); do { switch(c) /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人*/ { case 1:printf("职工号改为: "); scanf("%d",&num); em[i-1].num=num; break; case 2:printf("姓名改为: "); scanf("%s",name); strcpy(em[i-1].name,name); break; case 3:printf("性别改为: "); getchar(); scanf("%c",&sex); em[i-1].sex=sex; break; case 4:printf("年龄改为: "); scanf("%d",&age); em[i-1].age=age; break; case 5:printf("学历改为: "); scanf("%s",xueli); strcpy(em[i-1].xueli,xueli); break; case 6:printf("工资改为: "); scanf("%d",wage); break; case 7:printf("住址改为: "); scanf("%s",addr); strcpy(em[i-1].addr,addr); break; case 8:printf("电话改为: "); scanf("%ld",&tel); em[i-1].tel=tel; break; } printf("\n"); printf("\n是否确定所修改的信息?\n 是请按1 ; 不,重新修改请按2: \n"); scanf("%d",&b); } while(b==2); printf("\n浏览修改后的所有职工信息:\n"); printf("\n"); save(m); display(); printf("\n继续修改请按1,不再修改请按0\n"); scanf("%d",&t); switch(t) { case 1:modify();break; case 0:break; default :break; } } 用户使用说明 (1)用户打开程序时首先进入菜单界面如下