资源描述
. .
中国地质大学
课 程 设 计 报 告 书
所属课程名称 C程序设计
题 目 职工信息管理系统
院 〔系〕
班 级
学 号
学生XX
指导教师
辅导教师
中国地质大学
2021年9月6日
. .word.zl.
. .
课 程 设 计〔 论 文 〕任 务 书
工程学院 专 业 052081 班
一、课程设计〔论文〕题目 职工信息管理系统
二、课程设计〔论文〕工作:自 2021年 08月 28 日起至 2021年 09月 08 日止。
三、课程设计〔论文〕的容要求:
1、设计容:
制作职工信息管理系统,职工信息包括职工号,XX,性别,年龄,学历,工资,住址,等(职工号不重复),并实现数据录入、数据删除和数据浏览以及数据查询等一些功能。
2、课程设计的要求:
A.系统以菜单方式工作
B.职工信息录入功能(职工信息用文件保存)--输入
C.职工信息浏览功能 --输出
D.查询和排序功能:(至少一种查询方式) --算法
E.按工资查询
F.按学历查询等
G.职工信息删除,修改功能(任选项)
2021 年 9月 6 日
一、需求分析
1.能够对职工的根本情况进展输入、修改、增加以及删除和存盘。
2.能够对职工信息的浏览。
3.能够实现对职工的查询。
4.能够对职工的根本工资情况进展设定。
5.能够将职工信息和根本工资信息以文档形式保存
6.程序能够以菜单形式出现
. .word.zl.
. .
二、概要分析
职工信息管理系统设计
职工信息包括职工号,XX,性别,年龄,学历,工资,住址,等(职工号不重复),试设计一职工信息管理系统,使之能提供以下功能:
ü 系统以菜单方式工作
ü 职工信息录入功能(职工信息用文件保存)--输入
ü 职工信息浏览功能 --输出
ü 查询和排序功能:(至少一种查询方式) --算法
ü 按工资查询
ü 按学历查询等
ü 职工信息删除,修改功能(任选项)
下面是功能框架图:
三、详细设计以及调试分析
A.详细设计
1,创立了一个构造体employee,它包含num〔工号〕,name〔XX〕,sex〔性别〕,age〔年龄〕,xueli〔学历〕,wage(工资),addr〔住址〕,tel〔〕8个基类,即为员工的根本信息。
2,创立了主函数main〔〕,用它调用子函数menu〔〕,add〔〕,del〔〕,display〔〕,
Input〔〕,load〔〕,modify〔〕,save〔〕,search〔〕,search num〔〕,search xueli〔〕。通过主函数对子函数的调用实现程序的各项功能。
B.调试分析
void main()
{ menu();
int n,flag;
char a;
--------------------Configuration: 1 - Win32 Debug--------------------
piling...
1.c
g:\1.c(55) : error C2143: syntax error : missing ';' before 'type'
g:\1.c(56) : error C2143: syntax error : missing ';' before 'type'
g:\1.c(61) : error C2065: 'n' : undeclared identifier
g:\1.c(64) : error C2065: 'flag' : undeclared identifier
g:\1.c(90) : error C2065: 'a' : undeclared identifier
Error executing cl.exe.
1.obj - 5 error(s), 0 warning(s)
开场由于在主函数的调用过程中把子函数的调用放在了变量的定义之前,导致程序无法运行,后来改正错误,程序可以正常运行。另外在程序中还出现各种小错误,这里不一一列举。通过调试我发现调试是一个漫长而枯燥的过程 ,很锻炼人的耐心。
. .word.zl.
. .
四、程序使用指南
1.翻开程序出现菜单项选择项
2,选择录入职工信息,按提示录入
3.通过选项依次实现对职工信息的浏览,查询,删除,增加和修改。
五.源代码
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <string.h>
#define N 100
struct employee
{
int num;//工号
char name[10];//XX
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("\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--7):\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("职工号: ");
srand((int)time(0));
em[i].num=rand()%10000+20000000;
if(em[i].num!=em[i-1].num)
printf("%8d ",em[i].num);
printf("\n");
printf("请输入XX: ");
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<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 职工号\tXX\t性别\t年龄\t学历\t工资\t住址\t \n");
for(i=0;i<m;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("请输入要删除的职工的XX:\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职工号\tXX\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<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+20000000;
if(em[i].num!=em[i-1].num)
printf("%8d ",em[i].num);
printf("\n");
printf("请输入XX: ");
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\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: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<m;i++)
if(num==em[i].num)
{
printf("\n已找到此人,其记录为:\n");
printf("\n职工号\tXX\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<m;i++)
if(strcmp(em[i].xueli,xueli)==0)
{
printf("\n已找到,其记录为:\n");
printf("\n职工号\tXX\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");
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("请输入要修改的职工的XX:\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职工号\tXX\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.XX 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)
{
case 1:printf("职工号改为: ");
scanf("%d",&num);
em[i-1].num=num;
break;
case 2:printf("XX改为: ");
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;
}
}
六、总结
开场看到题目时,一点头绪都没有,无从下手。后来通过看书了解到了构造化设计方法,顿时豁然开朗。于是我按照题目要求把一个大系统分成模块,一个模块一个模块地编程序,这样就相当于在做小题目,问题简化多了。编模块时,开场也无从下手,经过反复思考后,终于有点思路了,后来越来越熟练,逐渐得心应手起来。我的程序很烦琐,编得很痛苦,连续奋战了几天,终于调试成功。虽然很烦琐,但我无怨无悔,因为我通过学习,学会了调试一个较长程序的根本方法,学会了用流程图表示算法,不仅初步了解了C++的使用,还进一步掌握和提高了利用C语言进展程序设计的能力。
教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。
. .word.zl.
展开阅读全文