C语言课程设计报告职工信息管理系统1.doc
C语言课程设计报告题 目: 职工信息管理系统院系名称: 通信与信息工程学院 专业名称: 信息工程班 级: 学生姓名: 学号(8位): 指导教师: 设计起止时间:2011年06月13日2011年06月22日一. 设计目的 加深对程序设计课程所学的理解,进一步巩固c语言知识,学会独立完成一定规模的系统编写,深化知识,学以致用二. 设计内容在熟练掌握C语言的基本知识,例如:数据类型(包括整形、实型、字符型、指针、数组、结构等);运算类型(包括算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(包括顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等的同时。进一步掌握各种函数的应用,包括时间函数、绘图函数,以及文件的读写操作等。三概要设计1 功能模块图; (1)主函数main (8)查询信息模块(2)密码模块 (9)按姓名查询模块 (3)进入菜单函数 (10)按职称查询模块(4)录入信息模块 (11)排序模块(5)删除信息模块 (12)按姓氏首字母排序(6)修改信息模块 (13)按基本工资排序(7)退出系统模块 (14)添加信息模块 (15)保存文件模块 2各个模块详细的功能描述。A.录入职工信息,首先确定录入人数,按步骤输入职工信息(工号、姓名、职称、基本工资、奖金、实际工资、生日、学历、电话、地址)B.浏览职工信息,按照录入信息依次显示C.修改职工信息,输入要修改职工姓名,选择要修改的信息D.删除职工信息,输入要修改职工姓名,确认后生效E.查询职工信息,选择输入姓名或职称,显示职工信息F.职工信息排序,选择排序方式,一种按照姓氏首字母,另一种按基本工资G.添加职工信息,首先确定添加人数,按步骤输入职工信息H.退出系统 职工 信息管理系统密码输入录 入 职 工 信 息浏 览 职 工 信 息修 改 职 工信 息删 除职 工信 息查 询职 工信 息职 工信 息排 序添 加职 工信 息退 出 职称查询姓名查询按姓名排序按基本工资排序 四详细设计1功能函数的调用关系图;2各功能函数的数据流程图;3重点设计及编码。头文件#include <stdio.h>#include <windows.h>#include <string.h>数据类型struct workerint num;char name100;char zhicheng50; int wages;int reward;long birth;int salary;char xueli50;char tele50;char address50; work500,work1; /*定义结构体*/函数说明void main(); /主函数void menu(); /声明菜单函数void type_in(); /声明录入函数void baocun(int); /声明保存函数void scan(); /声明浏览函数void del(); /声明删除函数void search(); /声明查询函数void search_zhicheng(); /声明按职称查询函数void search_name(); /声明按姓名查找函数void change(); /声明修改函数void order(); /声明排序函数void order_wages(); /声明按工资排序void order_name(); /声明按姓名(首字母顺序)排序void add(); /声明添加函数五测试数据及运行结果1正常测试数据(3组)及运行结果;2非正常测试数据(2组)及运行结果。六调试情况,设计技巧及体会1对自己的设计进行评价,指出合理和不足之处,提出改进方案.基本完成课程设计要求,设计简炼,可读性强,但是职工信息不够全面,要达到用户满意还有许多需要完善之处,同时如果采用链表的方法,增加密码难度,层次会高些2对设计及调试过程的心得体会。在本程序的设计过程中深刻体会到了程序是建立在数据结构之上的。程序中的所有算法都要围绕着自己所定义的抽象数据类型来设计。由此可见在设计程序时,定义一个好的数据结构尤为重要。在此程序设计过程中也增强了对一些算法的了解以及运用。但是也发现了自己还有很多不足的地方,要求自己在以后的学习中加以改正和提高。七参考文献c语言程序设计(王曙燕,科学出版社 )八附录:源代码(电子版)#include <stdio.h>#include <windows.h>#include <string.h>struct workerint num;char name100;char zhicheng50; int wages;int reward;long birth;int salary;char xueli50;char tele50;char address50; work500,work1; /*定义结构体*/void menu(); /声明菜单函数void type_in(); /声明录入函数void baocun(int); /声明保存函数void scan(); /声明浏览函数void del(); /声明删除函数void search(); /声明查询函数void search_zhicheng(); /声明按职称查询函数void search_name(); /声明按姓名查找函数void change(); /声明修改函数void order(); /声明排序函数void add(); /声明添加函数void order_wages();void order_name();void menu() /*菜单函数*/ printf("n"); printf(" 欢迎进入 n"); printf(" 职工信息管理系统 "); printf("*n"); printf(" 1.录入职工信息n"); printf(" 2.浏览职工信息n"); printf(" 3.查询职工信息n"); printf(" 4.删除职工信息n"); printf(" 5.修改职工信息n"); printf(" 6.职工信息排序n"); printf(" 7.添加职工信息n"); printf(" 8.退出n"); printf("*n"); printf("n"); /*/void main() int n,f,count=0; int key=1234; for(count=0;count<3;count+) printf("为了验证合法身份,请输入通行密码(4位):"); scanf("%d",&key); if(key=1234)break;else continue; if(count=3) printf("错误数达到最大,按任意按键退出n"); system("pause"); exit(-1); while(1) do menu(); /*调用菜单函数*/ printf("请输入你需要操作的序号(1-8):n"); scanf("%d",&n); if(n>=1&&n<=8) f=1; break; else f=0; printf("您输入有误,请重新选择!"); while(f=0); switch(n) case 1:printf(" 录入职工信息n");printf("n");type_in();break; case 2:printf(" 浏览职工信息n");printf("n");system("cls");scan();break; case 3:printf(" 查询职工信息n");printf("n");system("cls");search();break; case 4:printf(" 删除职工信息n");printf("n");system("cls");del();break; case 5:printf(" 修改职工信息n");printf("n");system("cls");change();break; case 6:printf(" 职工信息排序n");printf("n");system("cls");order();break; case 7:printf(" 添加职工信息n");printf("n");system("sls");add();break; case 8:goto loop ;/*用goto语句跳至跳至指定的行*/ default :break ; loop:/行标 system("cls"); printf("nnnnnn -谢谢使用!祝您工作顺利-nnnnnn");/*/void type_in() /*录入函数*/ int i,m,t1,t2; printf("请输入需要创建信息的职工人数(1-500):n"); scanf("%d",&m); for (i=0;i<m;i+) printf("请输入职工号: "); scanf("%d",&worki.num); printf("n"); printf("请输入姓名: "); scanf("%s",worki.name); getchar(); printf("请输入职称:0.职员1.主任 2.经理3.总监 4.董事长 "); printf("请输入序号(0-4):"); scanf("%d",&t1); if(t1=0)strcpy(worki.zhicheng,"职员"); if(t1=1)strcpy(worki.zhicheng,"主任"); if(t1=2)strcpy(worki.zhicheng,"经理"); if(t1=3) strcpy(worki.zhicheng,"总监"); if(t1=4) strcpy(worki.zhicheng,"董事长"); printf("请输入基本工资: "); scanf("%d",&worki.wages); printf("请输入奖金: "); scanf("%d",&worki.reward); printf("请输入生日(格式如19900101): "); scanf("%d",&worki.birth); printf("请输入学历:1.高中2.大学 3.硕士 4.博士 "); printf("请输入序号(1-4):"); scanf("%d",&t2); if(t2=1)strcpy(worki.xueli,"高中"); if(t2=2)strcpy(worki.xueli,"大学"); if(t2=3) strcpy(worki.xueli,"硕士"); if(t2=4) strcpy(worki.xueli,"博士"); printf("请输入电话:"); scanf("%s",worki.tele ); printf("请输入地址:"); scanf("%s",worki.address); getchar();system("cls"); printf("n一个职工的信息档案创建完毕!请输入下一个职工的信息n"); worki.salary=worki.wages + worki.reward; printf("n"); baocun(m);/*/void baocun(int m) /*保存文件函数*/ int i; FILE *fp; if (fp=fopen("E:worker_list.txt","wb")=NULL) /*创建文件并判断是否能打开*/ printf ("此文件不能打开n"); exit(0); for (i=0;i<m;i+) /*将内存中职工的信息输出到磁盘文件中去*/ if (fwrite(&worki,sizeof(struct worker),1,fp)!=1) printf("file write errorn"); fclose(fp);/*/int load() /*导入函数*/ FILE*fp; int i=0; if(fp=fopen("E:worker_list.txt","rb")=NULL) printf ("cannot open filen"); exit(0); else do fread(&worki,sizeof(struct worker),1,fp); i+; while(feof(fp)=0);fclose(fp);return(i-1); /*/void scan() /*浏览函数*/int i;int m=load();printf("n职工号t姓名t职称t基本工资t奖金t实际工资t生日t学历t电话t地址 n");for(i=0;i<m;i+) printf("n %dt%st%st%dt%dt%dt%ldt%st%st%sn",worki.num,worki.name, worki.zhicheng,worki.wages,worki.reward,worki.salary,worki.birth,worki.xueli,worki.tele,worki.address );printf("按任意键继续n");getchar();getchar();system("cls");/*/void del() /*删除函数*/ int m=load();int i,j,n,t,f;char name110;printf("n 原来的职工信息:n"); scan(); /* 调用浏览函数*/ printf("n");printf("请输入要删除的职工的姓名:n");scanf("%s",name1);for(f=1,i=0;f&&i<m;i+) if(strcmp(worki.name,name1)=0) printf("n已找到此人,原始记录为:n"); printf("n职工号t姓名t职称t基本工资t奖金t实际工资t生日t学历t电话t地址 n"); printf("n %dt%st%st%dt%dt%dt%ldt%st%st%s n",worki.num,worki.name, worki.zhicheng,worki.wages,worki.reward,worki.salary,worki.birth,worki.xueli,worki.tele,worki.address ); printf("n确实要删除此人信息请按1,不删除请按0n"); scanf("%d",&n); if(n=1) /*如果删除,则其他的信息都向前移一行*/ for(j=i;j<m-1;j+) workj=workj+1; f=0; if(!f) m=m-1;else printf("n对不起,查无此人!n"); printf("n 浏览删除后的所有职工信息:n"); baocun(m); /*调用保存函数*/ scan(); /*调用浏览函数*/printf("n继续删除请按1,不再删除请按0n");scanf("%d",&t);switch(t) case 1:del();break; case 0:break; default :break;system("cls");/*/void search()/*查询函数*/ int t,f;do printf("n按姓名查询请按1 ; 按职称查询请按2 ; 进入主函数按3n"); scanf("%d",&t); if(t>=1&&t<=3) f=1; break; else f=0; printf("您输入有误,请重新选择!"); while(f=0);system("cls"); while(f=1) switch(t) case 1:printf("按姓名查询n");search_name();break; case 2:printf("按职称查询n");search_zhicheng();break; case 3:main();break; default:break; system("cls"); /*/void search_name()/*按姓名查找函数*/ char name110; int i,t; int m=load(); printf("请输入要查找的姓名:n"); scanf("%s",name1); for(i=0;i<m;i+) if(strcmp(name1,worki.name)=0) printf("n已找到此人,其记录为:n"); printf("n职工号t姓名t职称t基本工资t奖金t实际工资t生日t学历t电话t 地址 n"); printf("n %dt%st%st%dt%dt %dt%ldt%st%st%sn",worki.num,worki.name, worki.zhicheng,worki.wages,worki.reward,worki.salary,worki.birth,worki.xueli,worki.tele,worki.address); break; if(i=m) printf("n对不起,查无此人n"); printf("n"); printf("返回查询函数请按1,继续查询职工号请按2n"); scanf("%d",&t); switch(t) case 1:search();break; case 2: break; default:break; /*/void search_zhicheng()/*按职称查找函数*/ char zhicheng110; int i,t; int m=load(); printf("请输入要查找的职称:n"); scanf("%s",zhicheng1); for(i=0;i<m;i+) if(strcmp(zhicheng1,worki.zhicheng)=0) printf("n已找到此人,其记录为:n"); printf("n职工号t姓名t职称t基本工资t奖金t实际工资t生日 t学历t电话t 地址 n"); printf("n %dt%st%st%dt%dt%dt%ldt%st%st%sn",worki.num,worki.name, worki.zhicheng,worki.wages,worki.reward,worki.salary,worki.birth,worki.xueli,worki.tele,worki.address); break; if(i=m) printf("n对不起,查无此人n"); printf("n"); printf("返回查询函数请按1,继续查询职工号请按2n"); scanf("%d",&t); switch(t) case 1:search();break; case 2: break; default:break; /*/void change() /*修改函数*/int num;char name20;char zhicheng50; int wages;int reward;int birth;int salary;char xueli50;char tele50;char address50; int b,c,i,n,t1,t2,f,T; int m=load(); /*导入文件内的信息*/ printf("n 原来的职工信息:n"); scan(); /* 调用浏览函数*/ printf("n"); printf("请输入要修改的职工的姓名:n");scanf("%s",name);for(f=1,i=0;f&&i<m;i+) if(strcmp(worki.name,name)=0) printf("n已找到此人,原始记录为:n"); printf("n职工号t姓名t职称t基本工资t奖金t实际工资t生日 t学历t电话 t 地址 n"); printf("n %dt%st%st%dt%dt%dt%ldt%st%st%sn",worki.num,worki.name, worki.zhicheng,worki.wages,worki.reward,worki.salary,worki.birth,worki.xueli,worki.tele,worki.address); printf("n确实要修改此人信息请按1 ; 不修改请按0n"); scanf("%d",&n); if(n=1) printf("n需要进行修改的选项n 1.职工号 2.姓名 3.职称 4.基本工资 5.奖金 6.生日 7.实际工资 8.学历9.电话 10.地址n"); printf("请输入你想修改的那一项序号:n"); scanf("%d",&c); if(c>7|c<1) printf("n选择错误,请重新选择!n"); f=0; if(f=1) printf("n对不起,查无此人!n"); do switch(c) /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人*/ case 1:printf("职工号改为: "); scanf("%d",&num); worki-1.num=num; break; case 2:printf("姓名改为: "); scanf("%s",name); strcpy(worki-1.name,name); break; case 3: printf("职称改为:0.职员1.主任 2.经理3.总监 4.董事长 "); printf("请输入序号(0-4):"); scanf("%d",&t1); if(t1=0)strcpy(worki-1.zhicheng,"职员"); if(t1=1)strcpy(worki-1.zhicheng,"主任"); if(t1=2)strcpy(worki-1.zhicheng,"经理"); if(t1=3) strcpy(worki-1.zhicheng,"总监"); if(t1=4) strcpy(worki-1.zhicheng,"董事长"); break; case 4:printf("基本工资改为: "); scanf("%d",&wages); worki-1.wages=wages; break; case 5:printf("奖金改为: "); scanf("%d",&reward); worki-1.reward=reward; break; case 6:printf("生日改为: "); scanf("%ld",&birth); worki-1.birth=birth; break; case 7:printf("实际工资改为: "); scanf("%d",&salary); worki-1.salary=salary; break; case 8: printf("学历改为:1.高中2.大学 3.硕士 4.博士 "); printf("请输入序号(1-4):");