实验题目:员工信息管理系统
一、实验目的
1.熟悉c语言的编译连接和运行过程。
2.掌握c语言的数据类型,熟悉整型、实型、字符型变量的定义方式及如何给
它们赋值。
3.掌握if语句及switch语句的运用方法及嵌套应用方法。
4.掌握实现循环结构的三种语句while、do-while.、for 的使用。
5.掌握函数的定义方法和调用方法。
6.能够采用模块化思想调试程序。
二.实验内容
1.编写程序并进行调试运行。
2.输入员工资料,并保存于文件。每个员工包含信息如:工作证号、姓名、性别、
工龄、学历、职务、电话、工资等。
3.对已存入的员工信息进行更新操作,包括添加一个员工信息、删除某个员工信
息和修改某个员工信息。
4.通过输入姓名、工作证号的方式查询员工信息。
5.最后输出员工信息,供需要时打印。
二、需求分析
1.该程序可用于对企业员工情况基本信息的存储、更新、查询、输出等操作,
以实现对企业员工的管理。
2.其中更新功能包括:添加信息、删除信息、修改信息、可根据需要添加一个
或多个员工信息,也可对个别员工信息进行适当的删除或修改。以便随时更新员工信息。
3.程序中设计的查询功能可根据需要从若干数据中查询某个员工信息,并且可
根据两种不同的方法查询:按工作证号查询和按姓名查询。以满足不同的需要。
四、概要设计
1、方案设计
对系统进行分析,给出结构图
分析:系统要求实现许多的功能,因此遵循结构化程序设计思想来进行本系统的设计—自顶向下、逐步细化,将系统设计任务分解出许多子功能模块进行设计
结构图如下:
2.模块功能说明
对各个模块进行功能的描述
(1).输入模块:
录入需要管理的员工信息并将信息保存于文件中,以方便日后进行打印、读取、更新等操作。
(2).添加模块:
可添加一个或多个员工信息,并将所添加员工信息保存,方便查找。
(3).删除模块:
可对辞职或休假的员工信息做删除处理。
(4).修改模块:
可根据需要对多个员工信息进行修改,也可随时对个别项进行修改。
(5).查询模块:
可对已建立的员工信息进行查询,并且可根据需要选择按姓名查询或按工作证号查询。
(6).保存模块:
用于对信息进行保存。
(7).输出模块:
将所有员工信息或想要查询的员工信息显示于屏幕,用于打印员工信息或查找某些员工信息。
(8). 修改密码:
对系统的密码可以进行修改,确保信息的安全。
(9) . 关于系统:
对系统的简介,以及操作时的注意事项。
(10).退出系统:
选择该项,自动退出该系统。
五、详细设计及运行结果
六.调试情况及运行结果Array
1
它要大得多,
不注意的小的知识点有了新的巩固;我先编的主函数,调试后我又一个一个模块的往上加,每加上一个调试一下;虽然在编程过程中有些模块也出现了一些小问题,但在翻阅课本和同学们的帮助下,我很有耐心的一次又一次的进行修改,最后运行的结果基本上达到了预期的目的。可这毕竟是第一次独立完成这样的大程序,虽然并不是非常健壮,但程序中没有错误和警告,各项功能都能完成,因此我对两周的实习结果还是理想的。
这次编程中我感觉程序中最满意的地方有两点:1、程序的操作界面美观大方。2、我给程序上加上了密码修改这一模块,可以说密码函数花费了大量时间,需要重新建立一个文件来写入密码保存密码。下次登陆时需要打开密码文件,判断密码是否正确。已有的那些功能虽已能基本上满足用户的需要,但如果还有更多的功能程序就会更加完美。如:录入错误数据时,系统没有设计输出错误操作的提示。
2、在设计过程中的感受。
本次C 语言的实习课让我对C 语言的学习又有了更深入的了解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中使我在课堂上十几周学到的知识得到了巩固,有很多以前理解不了的课本知识在这次上机实习后,再回头看一下感觉豁然开朗。学校组织的这次实习让我们这些实践知识匮乏的大学生增添了许多社会经验,为我们将来走上工作岗位其了不小的铺垫作用。
本次实习中遇到了很多以前没有遇到过的问题,也曾感到比较浮躁,但想到以前都是作为用户用各种程序,而这次自己是编程者,可以让程序按自己的想法运行,给了我继续的兴趣和信心。在老师的指导下和同学的帮助下,我顺利的结束了本次实习,让我知道原来凭借自己努力取得的成功会让自己这么欣慰。
七.参考文献
《C语言程序设计》王曙燕曹锰科学出版社2005年2月
《C语言程序设计》谭浩强清华大学出版社1999年12月八。附录:
#include
#include
#define MAX 5
#define PAGE 4
#define PRINTF1 printf("-------------------------------------------------------------------\n")
#define PRINTF2 printf("工作号\t姓名\t性别\t工龄(年月日)\t学历\t职务\t电话\t工资\n")
#define PRINTF3 printf("\n%d\t%s\t%s\t%d-%d-%d\t%s\t%s\t%s\t%d\n",workers[i].num,workers[i].name,workers[ i].sex,workers[i].worktime.year, workers[i].worktime.month, workers[i].worktime.day,workers[i].degree,workers[i].position,workers[i].tel,workers[i].salary)
int sum;/*用来记录员工人数*/
/*日期结构体类型*/
struct date
{int year;
int month;
int day;
};
/*员工结构体类型*/
struct workers_type
{int num;
struct date worktime;
char name[10];
char sex[2];
char degree[5];
char position[5];
char tel[12];
int salary;
}workers[MAX];/*存放MAX个员工信息记录的结构体数组*/
/*保存基本信息*/
save_message(int sum)
{ FILE *fp;
int i;
if((fp=fopen("worker information.txt","wt"))==NULL)
{ printf("该文件错误!\n");
return;
}
for(i=0;i if(fwrite(&workers[i],sizeof(struct workers_type),1,fp)!=1) printf("写文件错误!\n"); fclose(fp); } /*第一:输入模块*/ input_message() int i=0,x; clrscr(); printf("\n\n 请输入要录入的员工数量: "); scanf("%d",&x); printf("\n\n 录入员工信息(最多%d个员工)\n",x); printf(" ----------------------------------------------------------------------\n"); do {printf("第%d个员工信息",i+1); printf("\n员工的工作证号:"); scanf("%d",&workers[i].num); printf("\n姓名:"); scanf("%s",workers[i].name); printf("\n性别(男=m,女=f):"); scanf("%s",&workers[i].sex); printf("\n工龄(yy--mm--dd):"); fflush(stdin); scanf("%d-%d-%d",&workers[i].worktime.year, &workers[i].worktime.month, &workers[i].worktime.day); printf("\n学历:"); scanf("%s",workers[i].degree); printf("\n职务:"); fflush(stdin); scanf("%s",workers[i].position); printf("\n电话:"); scanf("%s",workers[i].tel); printf("\n工资:"); scanf("%d",&workers[i].salary); i++; }while(i printf("\n --%d员工信息输入完毕!--\n",i); sum=i; printf("\n 按任意键返回主菜单!"); bioskey(0);} /*读取信息*/ read_message() { FILE *fp; int i=0; if((fp=fopen("worker information.txt","rt"))==NULL) { printf("\n\n*****暂时还没有任何库存信息,按任意键进入主菜单选择基本信息的录入!*****\n"); return(0); while(feof(fp)!=1) { fread(&workers[i],sizeof(struct workers_type),1,fp); if(workers[i].num==0) break; else i++; } fclose(fp); return(i); } /*第二:输出模块*/ output_message() { int i=0,j=0,count,page=1; clrscr(); printf("\n\n ----------员工信息表--------- 第%d页\n\n",page); PRINTF2; PRINTF1; do { if(workers[i].num!=0) { j++; if(j%PAGE!=0) { PRINTF3; PRINTF1; } else { PRINTF3; PRINTF1; if(workers[i+1].num!=0) { printf("按任意键继续!"); bioskey(0); clrscr(); printf("\n\n --员工信息表-- 第%d页\n\n",++page); PRINTF2; PRINTF1; } } } i++; }while(workers[i].num!=0); printf("按任意键返回主菜单!"); bioskey(0); } /*增加员工信息*/ insert_message() { int i=sum,j,flag=0; char choice; clrscr(); printf("\n\n 增加一个新员工\n"); printf(" ----------------------------------------------------------------------\n"); do { printf("\n 新员工的工作证号:"); scanf("%d",&workers[i].num); printf("\n 新员工姓名:"); scanf("%s",workers[i].name); printf("\n 新员工性别(男=m,女=f):"); fflush(stdin); scanf("%s",workers[i].sex); printf("\n 新员工工龄(yy-mm-dd):"); fflush(stdin); scanf("%d-%d-%d",&workers[i].worktime.year, &workers[i].worktime.month, &workers[i].worktime.day); printf("\n 新员工学历:"); fflush(stdin); scanf("%s",workers[i].degree); printf("\n 新员工职务:"); fflush(stdin); scanf("%s",workers[i].position); printf("\n 新员工电话:"); fflush(stdin); scanf("%s",&workers[i].tel); printf("\n 新员工工资:"); scanf("%d",&workers[i].salary); i++; sum=i; printf("\n 要继续吗?(Y/N)"); choice=getch(); if (choice=='y'||choice=='Y') { printf("\n 继续!\n"); flag=1; } else flag=0; }while(flag==1); printf("\n 按任意键返回主菜单!"); bioskey(0); } /*删除员工信息*/ del_message() { int i,k,flag,del_num; char choice; do { clrscr(); printf("\n 输入要删除的员工的工作证号:"); scanf("%d",&del_num); for(i=0;i if(workers[i].num==del_num) { for(k=i;k workers[k]=workers[k+1]; break; } if(i==sum) { printf("\n 该员工不存在"); bioskey(0); } printf("\n\n 继续修改吗?(Y/N)"); choice=getch(); if (choice=='Y'||choice=='y') { flag=1; printf("\n 继续!\n"); } else flag=0; }while(flag==1); printf("\n 按任意键返回主菜单!"); bioskey(0); } /*修改信息*/ resive_message() { int i=0,choice,revise_num,flag; do { clrscr(); printf("\n 输入要修改的员工的工作证号"); scanf("%d",&revise_num); for(i=0;i if(workers[i].num==revise_num) { printf("\n --员工信息--\n"); PRINTF1; PRINTF2; PRINTF3; printf("\n 您要修改哪一项?\n"); printf("\n 1.工作证号\n"); printf("\n 2.姓名\n"); printf("\n 3.性别\n"); printf("\n 4.工龄\n"); printf("\n 5.学历\n"); printf("\n 6.职务\n"); printf("\n 7.电话\n"); printf("\n 8.工资\n"); printf("\n 请输入(1-8):"); scanf("%d",&choice); switch(choice) { case 1: printf("\n 输入修改后的工作证号:"); scanf("%d",&workers[i].num);break; case 2: printf("\n 输入修改后的姓名:"); scanf("%s",workers[i].name);break; case 3: printf("\n 输入修改后的性别:"); scanf("%s",workers[i].sex);break; case 4: printf("\n 输入修改后的工龄(yy-mm-dd):"); scanf("%d-%d-%d",&workers[i].worktime.year, &workers[i].worktime.month, &workers[i].worktime.day);break; case 5: printf("\n 输入修改后的学历:"); scanf("%s",workers[i].degree);break; case 6: printf("\n 输入修改后的职务:"); scanf("%s",workers[i].position);break; case 7: printf("\n 输入修改后的电话:"); scanf("%s",&workers[i].tel );break; case 8: printf("\n 输入修改后的工资:"); scanf("%d",&workers[i].salary);break; } PRINTF1; PRINTF2; PRINTF3; break; } if(i==sum) { printf("\n 该员工不存在"); bioskey(0); } printf("\n\n 继续修改吗?(Y/N)"); choice=getch(); if (choice=='Y'||choice=='y') { flag=1; printf("\n 继续!\n"); } else flag=0; }while(flag==1); printf("\n 按任意键返回主菜单!"); bioskey(0); } /*第三:更新模块*/ renew_message() { int choice; do { clrscr(); printf("\n\n\n **********更新员工信息*********\n\n"); printf(" 1.添加员工信息\n\n"); printf(" 2.删除员工信息\n\n"); printf(" 3.修改员工信息\n\n"); printf(" 0.返回主菜单\n\n"); printf(" 请选择(0-3):"); scanf("%d",&choice); switch(choice) { case 1: insert_message();break; case 2: del_message();break; case 3: resive_message();break; case 0: break; } }while(choice!=0); } /*按姓名查询*/ inquire_name() { int i,choice,j=0; char inquire_name[10]; clrscr(); printf("\n 输入要查询的员工姓名:"); scanf("%s",inquire_name); for(i=0;i if(strcmp(workers[i].name,inquire_name)==0&&workers[i].num!=0) { printf("\n --员工信息--\n"); PRINTF1; PRINTF2; PRINTF3; } else j++; if(j==sum) printf("\n 该员工不存在!"); bioskey(0); } /*按工作证号查询*/ inquire_num() { int i,choice,j=0,inquire_num; clrscr(); printf("\n 输入要查询的员工的工作证号:"); scanf("%d",&inquire_num); for(i=0;i if(workers[i].num==inquire_num&&workers[i].num!=0) { printf("\n --员工信息--\n"); PRINTF1; PRINTF2; PRINTF3; } else j++; if(j==sum) printf("\n 该员工不存在!"); bioskey(0); } /*按学历查询*/ inquire_degree() { int i,choice,j=0; char inquire_degree[5]; clrscr(); printf("\n 输入要查询的员工学历:"); scanf("%s",inquire_degree); for(i=0;i if(strcmp(workers[i].degree,inquire_degree)==0&&workers[i].num!=0) { printf("\n --员工信息--\n"); PRINTF1; PRINTF2; PRINTF3; } else j++; if(j==sum) printf("\n 该员工不存在!"); bioskey(0); } /*第四:查询模块*/ inquire_message() { int choice; do { clrscr(); printf("\n\n\n ******查询员工信息******\n\n"); printf(" 1.按员工姓名查询\n\n"); printf(" 2.按员工的工作证号查询\n\n"); printf(" 3.按员工的学历查询\n\n"); printf(" 0.返回主菜单\n\n"); printf(" 请选择(0-3):"); scanf("%d",&choice); switch(choice) { case 1:inquire_name();break; case 2:inquire_num();break; case 3:inquire_degree();break; case 0:break; } }while(choice!=0); } /*工作证号排行*/ sort_num() { struct workers_type *p, *q[MAX]; int i,j,k; clrscr(); printf("\n 工作证号排行\n"); printf("---------------------------------------------------------------------\n"); printf("排行\t工作号\t姓名\t性别\t学历\t职务\t电话\t工资\n"); p=workers; for(i=0;i q[i]=p++; for(i=0;i { k=i; for(j=i+1;j if(q[k]->num>q[j]->num) k=j; if(k!=i) { p=q[i];q[i]=q[k];q[k]=p;} } for(i=0;i printf("\n%d\t%d\t%s\t%s\t%s\t%s\t%s\t%d\n",i+1,q[i]->num,q[i]->name,q[i]->sex,q[i]->degree, q[i]->position,q[i]->tel,q[i]->salary); bioskey(0); } /*工资排行*/ sort_salary() { struct workers_type *p, *q[MAX]; int i,j,k; clrscr(); printf("\n --工资排行--\n"); printf("--------------------------------------------------------------\n"); printf("排行\t工作号\t姓名\t性别\t学历\t职务\t电话\t工资\n"); p=workers; for(i=0;i q[i]=p++; for(i=0;i { k=i; for(j=i+1;j if(q[k]->salary if(k!=i) { p=q[i];q[i]=q[k];q[k]=p;} } for(i=0;i printf("\n%d\t%d\t%s\t%s\t%s\t%s\t%s\t%d\n",i+1,q[i]->num,q[i]->name,q[i]->sex,q[i]->degree, q[i]->position,q[i]->tel,q[i]->salary); bioskey(0); } /*第五:排序模块*/ sort_message() { int choice; do { clrscr(); printf("\n\n\n **********员工排行信息**********\n\n"); printf(" 1.工作证号排行\n\n"); printf(" 2.工资排行\n\n"); printf(" 0.返回主菜单\n\n"); printf(" 请选择(0-2):"); scanf("%d", &choice); switch(choice) { case 1: sort_num();break; case 2: sort_salary();break; case 0: break; } }while(choice!=0); } /*学历统计*/ count_degree() { int i,choice,j=0; char count_degree[5]; clrscr(); printf(" 输入要统计的员工学历:\n"); scanf("%s",&count_degree); for(i=0;i if(strcmp(count_degree,workers[i].degree)==0&&workers[i].num!=0) j++; if(j==0) printf("\n 没有相关信息!"); else printf("\n 要统计的员工总数%d",j); bioskey(0); } /*性别统计*/ count_sex() { int i,choice,j=0; char count_sex[2]; clrscr(); printf(" 输入要统计的员工性别\n:"); scanf("%s",&count_sex); for(i=0;i if(strcmp(count_sex,workers[i].sex)==0&&workers[i].num!=0) j++; printf("\n 要统计的员工总数%d",j); if(j==0) printf("\n 没有相关信息!"); else bioskey(0); } /*第六:统计模块*/ count_message() { int choice; do { clrscr(); printf("\n\n\n **********统计员工信息**********\n\n"); printf(" 1.统计员工学历\n\n"); printf(" 2.统计员工性别\n\n"); printf(" 0.返回主菜单\n\n"); printf(" 请选择(0-2):"); scanf("%d",&choice); switch(choice) { case 1: count_degree();break; case 2: count_sex();break; case 0: break; } }while(choice!=0); } /*修改密码*/ void resive_password() {int flag; char ch[10],ch1[10]; FILE *fp; clrscr(); fp=fopen("password","rb"); fgets(ch1,7,fp); fclose(fp); printf("\n\n\n\n\t 请输入六位数旧密码:"); scanf("%s",ch); if(strcmp(ch,ch1)==0) { flag=1; fp=fopen("password","wb"); printf("\n 请输入六位数新密码:"); scanf("%s",ch); fputs(ch,fp); fclose(fp); } else flag=0; switch(flag) { case 0:printf("\n 原密码不正确");getch();break; case 1:printf("\n 密码修改成功");getch(); } } /*第七:密码模块*/ password() {int flag; char ch[10];FILE *fp; char ch1[10]="000000"; clrscr(); if((fp=fopen("password","rb"))==NULL) { fp=fopen("password","wb"); fputs(ch1,fp); fclose(fp); } else {fgets(ch1,7,fp); fclose(fp);} printf("\n\n\n\n\t 请输入六位数密码:"); gets(ch); if(strcmp(ch,ch1)==0) flag=1; else flag=0; switch(flag) { case 0:printf("\n\n\t 密码不正确\n");password(); case 1:printf("\n\n\t 密码正确\n"); } } /*第八:说明模块*/ introduce_message() { clrscr(); printf("\n\n\n *1. 为使系统正常运行请按系统提示输入\n\n"); printf("\n\n\n *2 .若使用中存在问题请联系我们,谢谢使用本系统\n"); printf("\n\n\n\n\n\n\n\n 制作人:韩承玺\n"); printf("\n q q : 755528319\n"); getch(); } /*主程序*/ main() {int choice; sum=read_message(); printf("\n\n\n\n *********************************************************\n"); printf(" ******************** 欢迎进入********************\n"); printf(" ****************西安创天集团员工信息管理系统*************\n"); printf(" ** **\n"); printf(" ** **\n"); printf(" ** **\n"); printf(" ** **\n"); printf(" ** **\n"); printf(" ** **\n"); printf(" ** **\n"); printf(" ** **\n"); printf(" ** 请按任意健进入**\n"); printf(" ** **\n"); printf(" ** **\n"); printf(" *********************************************************\n"); bioskey(0); clrscr(); password(); do { clrscr(); printf("\n\n ^****************员工信息管理系统*****************^\n"); printf(" ^* *^\n"); printf(" ^* * 1.录入员工信息*^\n"); printf(" ^* *^\n"); printf(" ^* * 2.打印员工信息*^\n"); printf(" ^* *^\n"); printf(" ^* * 3.更新员工信息*^\n"); printf(" ^* *^\n"); printf(" ^* * 4.查询员工信息*^\n"); printf(" ^* *^\n"); printf(" ^* * 5.统计员工信息*^\n"); printf(" ^* *^\n"); printf(" ^* * 6.排行员工信息*^\n"); printf(" ^* *^\n"); printf(" ^* * 7.修改系统密码*^\n"); printf(" ^* *^\n"); printf(" ^* * 8.关于本系统*^\n"); printf(" ^* *^\n"); printf(" ^* * 0.退出员工信息管理系统*^\n"); printf(" ^* *^\n"); printf(" ^* 请选择(0-8): *^\n"); printf(" ^********************************************************^\n"); scanf("%d",&choice); switch(choice) {case 1:input_message();break; case 2:output_message();break; case 3:renew_message();break; case 4:inquire_message();break; case 5:count_message();break; case 6:sort_message();break; case 7:resive_password();break; case 8:introduce_message();break; case 0:break; } }while(choice!=0); save_message(sum); printf("\n-以上员工信息已保存!-(文件名:worker information.txt)\n"); }salary) k=j;