资源描述
程序设计工程训练汇报
职员信息管理系统
课程名称 C语言程序设计工程训练
姓 名
院(系)
专业班级
学 号
指导老师
目 录
1 需求分析 1
2 系统总框图和功效模块说明 1
2.1 系统总框图 1
2.2 功效模块说明 2
3 系统设计 2
3.1 关键结构体 2
3.2关键功效函数 3
3.3 关键函数步骤图 4
4 系统调试 4
5 总结 9
6 源程序清单 10
1 需求分析
职员信息包含职员号、姓名、性别、年纪、学历、工资、住址、电话(职员号不反复)。
试设计职员信息管理系统,使之能提供以下功效:
l 系统以菜单方法工作
l 职员信息录入功效(职员信息用文件保留)--输入
l 职员信息浏览功效--输出
l 职员信息查询功效-算法(其中查询方法能够按学历查询、按职员号查询等)
l 职员信息删除、修改功效
2 系统总框图和功效模块说明
2.1 系统总框图
职员信息管理系统
输入职员信息
修改职员信息
删除职员信息
查询职员信息
保留职员信息
按职员号查询
按姓名查询
按学历查询
图1 系统总框图
2.2 功效模块说明
1.菜单模块:显示职员管理系统主菜单,供用户选择所需功效,经过自己定义void menu()函数来实现。
2.输入模块:输入职员工号、姓名和其它部分职员相关信息,经过自己定义void input()函数来实现。
3.保留模块:将内存中职员信息输出到磁盘文件中,能够经过自己定义void save(int)函数来实现。
4.浏览模块:浏览全部职员相关信息,经过自己定义void display()函数来实现。
5.删除模块:删除需要删除职员全部信息,经过自己定义void del()函数来实现。
6.添加模块:添加需要添加职员相关信息,经过自己定义void add()函数来实现。
7.按职员学历查询模块:能够按职员学一向查询职员相关信息,经过自己定义void search_xuelil函数来实现。
8.按职员电话号码查询模块:能够按职员电话来查询职员相关信息,经过自己定义void search_tel函数来实现。
9.修改模块:能够修改需要修改职员相关信息,经过自己定义void modify()函数 来实现。
10.退出系统模块:退出职员信息管理系统,经过头文件windows.h中exit(0)函数来实现。
3 系统设计
3.1 关键结构体
struct employee //定义一个职员信息结构体
{
int num;
char name[10];
char sex;
int age;
char xueli[30];
int wage;
char addr[30];
char tel[20];
}em[100]; };
3.2关键功效函数
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();
3.3 系统总体步骤图
菜单
开始
依据菜单输入n值选择程序
保留
结束
是否继续进行
N
Y YY
5
添加职员信息
6
修改职员信息
2
浏览职员信息
3
查询职员信息
4
删除职员信息
7
退出
1
录入职员信息
4 系统调试
1.运行程序,进入职员信息管理系统主菜单:
2.输入数字“1”进行录入职员信息:
3.录入职员信息
4.输入“2”浏览职员信息:
5.输入“y”后继续,输入“3”进行查询职员信息:
6.进入主菜单,输入“4”进行删除职员信息:
7.进入主菜单输入“5”进行添加职员信息:
8.进入主菜单输入“6”进行修改职员信息:
9.进入主菜单输入”7”退出职员信息管理系统。
5 总结
经过这次课程设计,增加了我们对软件技术了解,即使还不明确软件技术包含具体内容,但从学习C语言这门课程开始,已发觉程序设计好处,它对我们数学学习也有很大帮助。在学习C语言过程中也学到和巩固了很多计算机应用基础知识,对计算机机体也有了一个较为具体了解。在具体操作中对这学期所学C语言理论知识得到巩固加强,达成实训目标,也发觉自己不足之处,为我们以后c语言学习奠定了基础,同时体会到C语言含有语句简练,使用灵活,实施效率高等特点。发觉上机操作关键作用,尤其是对数组和循环有了深刻了解。经过实际操作,学会 C语言程序编程基础步骤、基础方法,开发了自己逻辑思维能力,培养了分析问题、处理问题能力。
因为本课题中很多知识点全部没有学过全部要靠自己到课外资料中去查找。在用时候难免出现这么那样错误。如开始设计出来菜单不是预想那样,而是总个窗中出现混乱。处理这个问题措施是调整。一个系统菜单和提醒信息很关键。假如没有这些用户根本不知道怎么用你设计这个系统。在设计调试过程中也无法顺利完成调试工作。有了一个清楚简单菜单和部分提醒信息这后,调试过程完成比较顺利。
回顾起此次课程设计,至今我们仍感慨颇多,确实,从拿到题目到完成整个编程,从理论到实践,在这些日子里,能够学到很多很多东西,同时不仅能够巩固了以前所学过知识,而且学到了很多在书本上所没有学到过知识。经过这次课程设计使我们知道了理论和实际相结合是很关键,只有理论知识是远远不够,只有把所学理论知识和实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提升自己实际动手能力和独立思索能力。在设计过程中碰到问题,能够说得是困难重重,这毕竟第一次做,难免会碰到过多种多样问题,同时在设计过程中发觉了自己不足之处,对以前所学过知识了解得不够深刻,掌握得不够牢靠,比如说结构体……经过这次课程设计以后,一定把以前所学过知识此次课程设计结束了,对于我们影响很大。我们经过这次实践学到了很多知识。学到了设计一个简单系统。要注意哪些方面。也使我们知道自己哪些方面做得还不够。
6 源程序清单
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <string.h>
#define N 100
struct employee
{
int num;
char name[10];
char sex;
int age;
char xueli[30];
int wage;
char addr[30];
double 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("计算机123班 敖立伟\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()
{
int n,flag;
char a;
menu(); /*调用菜单函数*/
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;
system("cls"); /*清屏*/
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<m;i++)
{
printf("请输入职员号:");
scanf("%d",&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("%lf",&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<m;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<m;i++) /*m为输入部分职员人数*/
printf("\n %d\t%s\t%c\t%d\t%s\t%d\t%s\t%.0lf\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<m;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%.0lf\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<m-1;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("请输入职员号: ");
srand((int)time(0));
em[i].num=rand()%10000+0000;
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("%lf",&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("请输入要查找职员号(0--):\n");
scanf("%d",&num);
for(i=0;i<m;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%.0lf\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<m;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%.0lf\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("%lf",&tel);
for(i=0;i<m;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%.0lf\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<m;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%.0lf\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("%lf",&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;
}
}
展开阅读全文